|
| Sende unsgined char over tcp socket Fra : Morten Larsen |
Dato : 04-09-05 11:54 |
|
Jeg har en editor der kan gemme ansi grafik på følgende måde:
#define img_Login_WIDTH =80;
#define img_Login_DEPTH = 22;
#define img_Login_LENGTH = 3520;
unsigned char img_Login [] = {}
Hvordan får jeg sendt arrayet img_Login via en socket?
På forhånd tak.
// Morten
| |
Bertel Brander (04-09-2005)
| Kommentar Fra : Bertel Brander |
Dato : 04-09-05 15:27 |
|
Morten Larsen wrote:
> Jeg har en editor der kan gemme ansi grafik på følgende måde:
>
> #define img_Login_WIDTH =80;
> #define img_Login_DEPTH = 22;
> #define img_Login_LENGTH = 3520;
> unsigned char img_Login [] = {}
>
> Hvordan får jeg sendt arrayet img_Login via en socket?
Du åbner en socket med socket(...)
Laver en bind med bind(...)
En connect med connect(...)
Og sender med send(...) eller sendto(...)
Hvilken kompiler bruger du og på hvilken platform (windows/linux/...) ?
Skal array'et sendes rå eller skal der noget IP/http/whatever på?
Hvad skal modtage array'et?
Det var måske lettere med en UDP socket?
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
Morten Larsen (04-09-2005)
| Kommentar Fra : Morten Larsen |
Dato : 04-09-05 16:23 |
|
> Du åbner en socket med socket(...)
> Laver en bind med bind(...)
> En connect med connect(...)
> Og sender med send(...) eller sendto(...)
Jo tak den kender jeg, mend send / sendto forventer en signed char og ikke
en unsigned.
> Hvilken kompiler bruger du og på hvilken platform (windows/linux/...) ?
Projektet er multiplatform. Og i windows compiler jeg med borland og linux
er det gcc.
> Skal array'et sendes rå eller skal der noget IP/http/whatever på?
>
> Hvad skal modtage array'et?
Det skal sendes råt til en telnet klient.
Hvis jeg bruger send ser det ikke ordentligt ud. Formentlig fordi den skal
have en signed char og ikke en unsigned :)
> Det var måske lettere med en UDP socket?
Skal være tcp.
| |
Bertel Brander (04-09-2005)
| Kommentar Fra : Bertel Brander |
Dato : 04-09-05 18:59 |
|
Morten Larsen wrote:
>>Du åbner en socket med socket(...)
>>Laver en bind med bind(...)
>>En connect med connect(...)
>>Og sender med send(...) eller sendto(...)
>
>
> Jo tak den kender jeg, mend send / sendto forventer en signed char og ikke
> en unsigned.
Hvis problemet kun er signed/unsigned, caster du bare til den rette type
(og caster tilbage på modtagersiden).
F.ex:
send(socket, (const char *)img_Login, SomeLength, Flags);
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
Morten Larsen (04-09-2005)
| Kommentar Fra : Morten Larsen |
Dato : 04-09-05 19:37 |
|
> Hvis problemet kun er signed/unsigned, caster du bare til den rette type
> (og caster tilbage på modtagersiden).
>
> F.ex:
> send(socket, (const char *)img_Login, SomeLength, Flags);
Type casting var nu det første jeg prøvede og det virker heller ikke.
Men der typecastes heller ikke tilbage på modtager siden, da dette er en
tilfældig telnet klient, i dette tilfælde
er det den som følger med operativ systemet.
Via vb.net er det intet problem, at få det ønskede resultat vist i telnet
klienten.
Men jeg vil nu gerne lave dette i c++. Umiddelbart virker det sådan at
winsock kun er lavet til at man skal kunne
sende ASCII tekst over den :) Men der er jo nok noget jeg ikke lige ved på
det område.
| |
Bertel Brander (04-09-2005)
| Kommentar Fra : Bertel Brander |
Dato : 04-09-05 22:18 |
|
Morten Larsen wrote:
>>Hvis problemet kun er signed/unsigned, caster du bare til den rette type
>>(og caster tilbage på modtagersiden).
>>
>>F.ex:
>>send(socket, (const char *)img_Login, SomeLength, Flags);
>
>
> Type casting var nu det første jeg prøvede og det virker heller ikke.
Måske skulle du have fortalt dette tidligere ?
> Men der typecastes heller ikke tilbage på modtager siden, da dette er en
> tilfældig telnet klient, i dette tilfælde
> er det den som følger med operativ systemet.
>
> Via vb.net er det intet problem, at få det ønskede resultat vist i telnet
> klienten.
> Men jeg vil nu gerne lave dette i c++. Umiddelbart virker det sådan at
> winsock kun er lavet til at man skal kunne
> sende ASCII tekst over den :) Men der er jo nok noget jeg ikke lige ved på
> det område.
Der burde ikke være noget problem med at sende andet en ASCII tegn over
en en tcp socket.
Hvad mener du med at det ikke virker? Hvad modtager telnet klienten
på den anden side?
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
Morten Larsen (05-09-2005)
| Kommentar Fra : Morten Larsen |
Dato : 05-09-05 11:11 |
|
>> Type casting var nu det første jeg prøvede og det virker heller ikke.
>
> Måske skulle du have fortalt dette tidligere ?
Ja, ok :)
> Der burde ikke være noget problem med at sende andet en ASCII tegn over
> en en tcp socket.
Nej ville jeg heller ikke mene, men er desværre ikke så skrap til cpp endnu
:)
> Hvad mener du med at det ikke virker? Hvad modtager telnet klienten
> på den anden side?
I vb.net sender jeg et byte array, indholdet af dette array er tegn med
encoding typen ANSI. Jeg sender dette array til telnet klienten, og den får
vist et stykke ANSI graffik. Her ser det således ud
http://www.thewildplace.dk/dk.edb.programmering.c/vbserv.PNG
Jeg gør i princippet det samme i Cpp, udover at array typen er unsigned
char, hvilket vel er det samme som en byte i vb.net.Når telnet klienten
modtager data fra min Cpp server applikation, bliver tegne vist forkert.
Hvilket er logisk nok da en signed char går fra -128 til +127 (hvis jeg
husker korrekt). En unsigned char's range er fra 0 til 255. De tegn jeg
bruger ligger i området 0 til 255, og det virker som om nogle af disse
værdier går tabt ved typecastet. Og dermed resultere i at skærm billede ser
så ledes ud http://www.thewildplace.dk/dk.edb.programmering.c/cserv.PNG
// Morten
| |
Michael Rasmussen (05-09-2005)
| Kommentar Fra : Michael Rasmussen |
Dato : 05-09-05 11:51 |
|
On Mon, 05 Sep 2005 12:10:51 +0200, Morten Larsen wrote:
> Jeg gør i princippet det samme i Cpp, udover at array typen er unsigned
> char, hvilket vel er det samme som en byte i vb.net.Når telnet klienten
> modtager data fra min Cpp server applikation, bliver tegne vist forkert.
> Hvilket er logisk nok da en signed char går fra -128 til +127 (hvis jeg
> husker korrekt). En unsigned char's range er fra 0 til 255. De tegn jeg
> bruger ligger i området 0 til 255, og det virker som om nogle af disse
> værdier går tabt ved typecastet. Og dermed resultere i at skærm billede ser
> så ledes ud http://www.thewildplace.dk/dk.edb.programmering.c/cserv.PNG
>
Er dit problem ikke snarere, at du sender escape-sekvenser, der håndterer
farver mv. på din Windowsterminal. Disse escape-sekvenser har ingen
gyldighed på en Unixterminal - her er escape-sekvenserne anderledes til
håndtering af farver mv. Prøv at lave en server, der kun sender teksten
uden escape-sekvenser.
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Morten Larsen (05-09-2005)
| Kommentar Fra : Morten Larsen |
Dato : 05-09-05 12:27 |
|
> Er dit problem ikke snarere, at du sender escape-sekvenser, der håndterer
> farver mv. på din Windowsterminal. Disse escape-sekvenser har ingen
> gyldighed på en Unixterminal - her er escape-sekvenserne anderledes til
> håndtering af farver mv. Prøv at lave en server, der kun sender teksten
> uden escape-sekvenser.
Problemet er ikke escape sekvenserne, da man før denne login skærm har
mulighed for at vælge.
Selve "skærm siderne" (ansi grafikken). Det er scriptet via lua. Så serveren
sender altid en version der passer til dit system. Da jeg dog løb ind i
problemet med at få afsendt en unsigned char via wsa i windows, (og
forventer også problemet er det samme med sys/socket.h på linux) lavede jeg
et hurtig standalone server der kun sender dette login billede og vil først
løse dette problem under windows, i min test server. Derefter har jeg en
change for at fixe det i selve bbs programmet :)
// Morten
| |
|
|