Socket Programmierung C/C++ - recv-Funktion hängt?

Mein recv-Funktion hängt, während die erste Antwort vom server.

Client-side code in c/c++:

void sockStuff() {

 int sock, bytes_recieved,bytes_send;
 char send_data[1024], recv_data[4096];

 struct hostent *host;
 struct sockaddr_in server_addr;

 host = gethostbyname("127.0.0.1");

 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  perror("SocketError");
  exit(1);
 }
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(50500);
 server_addr.sin_addr = *((struct in_addr *) host->h_addr);
 bzero(&(server_addr.sin_zero), 8);


 if (connect(sock, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))
   == -1) {
  perror("ConnectToError");
  exit(1);
 }


    bytes_send = send(sock, a, strlen(a), 0);
    bytes_send = shutdown(sock, 1);


 bytes_recieved = recv(sock, recv_data, 4096, 0); //Where the program hangs??
 recv_data[bytes_recieved] = '\0';
 printf("\nRecieved data = %s ", recv_data);
 cout << endl << endl;

 shutdown(sock,2);



}

Mein Client ist C/C++ und server-Seite ist Progress OpenEdge.
Siehe code und vorschlagen, was ging falsch.??

  • Sie sollten die Verwendung von sizeof(server_addr.sin_zero), anstatt die Magische Zahl 8. Oder noch besser null die gesamte Struktur und dann die Felder bestimmen, die Sie interessiert sind in.
  • Hi Neil, können Sie bitte erläutern Sie diese mehr als ich versuchte, sizeof(server_addr.sin_zero), anstatt der Nummer 8, aber noch kein Glück.Thnx.
InformationsquelleAutor Vishal | 2009-12-11
Schreibe einen Kommentar