11. februar 2003 - 11:26Der er
25 kommentarer og 2 løsninger
recv
Heisan...
Jeg vil gerne have at min RECV skal blive ved med at receive indtil det møder en nulterminering af den. Men så vidt jeg kan se så sender SEND ikke en nulterminering eller gør den? Er der nogen som kan give nogle kode eksempler på hvordan jeg kan få den til at virke med en nul terminering....
Jeg har brugt Beej simple client/server http://www.ecst.csuchico.edu/~beej/guide/net/bgnet.pdf som udgangspunkt til client server strukturen. Men så vidt jeg kan se så er det C, men jeg har tilføjet nogle ting til min egen kode og compilet det med g++ (jeg kører en linux-box)
Du kan sådan set godt bruge nulterminering til at signalere slut, men du skal sørge for at inkludere nullet i den byte-strøm du sender :
void SendData( char *mesg ) // mesg er nultermineret { // ved at lægge en til længden sikrer du dig at nullet også bliver sendt send(sock, mesg, strlen(mesg) + 1, 0); }
Soreno> Det kan man ikke lige, man resikere at der er nogle pakker i transit, således at man hopper ud af løkken uden at have fået al det data der er sendt
Sorry, men jeg nåede at indfører det i min egen kode inden jeg havde opdateret på siden igen, selvom svarene kom hurtigt... plus arne løsning passede perfekt ind i min egen kode....
hsloth >> Fra dokumentationen for recv: "If no incoming data is available at the socket, the recv() call waits for data to arrive unless the socket is non-blocking."
Så må det da være ok at bruge "sålænge recv ikke returnerer 0" (forudsat er der bruges en blocking TCP socket..) ?
Soreno + arne_v> Hvis du i din kode bruger en blocking socket vil du hænge i din while løkke indtil socketen bliver lukket, fra den anden ende - dette får recv til at returnere en negativ værdi - som din while betingelse vil fange, din kode vil derfor udskrive den sidst modtagne bid 2 gange.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.