sockets-sent/recv
-
Hallo,
Client macht ein File auf, und schickt es rüber:char* c = new char[4];//4 Bytes StreamReader* sr; try { sr = new StreamReader(S"C:\\hallo.txt"); while (sr->Peek() >= 0) { *c = sr->Read(); cout << *c; c++; } sentDataBytes = send(mySocket, c, 4, 0);
in "hallo.txt" steht: abcd
Server bekommt sie:char recvData[4]; recv(acceptSocket, recvData, sizeof(recvData), 0); for(int r=0; r<sizeof(recvData); r++) { cout << recvData[r]; }
warum kommen die 4 Buchstaben kommisch an?? der Client schickt sie richtig, aber der Empfänger zeigt kommische Zeichen.
PS: ich glaube, es hat zu tun mit Network Byte Order, oder? aber da gibt's htons und htonl, also nur aud short und long, außerdem braucht der "send" ein char*MFG,
mnab
-
char recvData[4]; recv(acceptSocket, recvData, sizeof(recvData), 0); for(int r=0; r<sizeof(recvData); r++) { cout << recvData[r]; }
bis du dir sicher das du von accept socket lesen kannst... normalerweise hat man doch ein socket was verbinungen akzeptiert und dann neue sockets liefert und nur über die kann man effektiv daten schicken/epfange aber nicht über das accept socket...
-
afaik ist socket-kommunikation mit standart c++ nicht möglich, gehört wohl eher nach winapi oder konsolenforum.
-
Original erstellt von japro:
bis du dir sicher das du von accept socket lesen kannst... normalerweise hat man doch ein socket was verbinungen akzeptiert und dann neue sockets liefert und nur über die kann man effektiv daten schicken/epfange aber nicht über das accept socket...also acceptSocket ist das neue Socket, was mir die Methode "accept(listenSocket,...)" zurückliefert.
-
thread verschoben ins rund um die programmierung forum. Rund um die Programmierung
-
mir fällt primär auf, dass du deinen buffer nicht nullterminierst, was aber bei deiner methode der ausgabe wurscht ist. mit network byte order hat das nix zu tun, das betrifft nur adressen. könnte es sein, dass du non-blocking sockets verwendest, und in wirklichkeit nix vom socket liest?
sizeof(recvData) müsste doch 4 ergeben oder? dann passt das ganze nicht in dein array. schreib mal char buffer[5] statt [4], dann sollte der string auch terminiert sein.
-
schreib mal char buffer[5] statt [4], dann sollte der string auch terminiert sein.
Der Computer fängt bei "0" anzuzuählen.
Also ist das wurscht.