2016-04-01 4 views
0

Ich schreibe ein einfaches Client-Server-Programm. Mein Server funktioniert gut mit Telnet, aber mein Client kann nur Bytes senden, nicht empfangen. Gibt es etwas Offensichtliches, das mir fehlt? Ich denke, dass es wegen meiner Verwendung der recv Funktion in irgendeiner Weise sein kann, aber es ist nicht offensichtlich für mich. Die recv-Funktion erhält konsistent 0 Bytes. Ich sollte hinzufügen, dass die Recv-Funktion nicht blockiert, noch ist die Anzahl der empfangenen Bytes immer Null.Warum empfängt mein Client keine Bytes?

Ein Ausschnitt des Codes in der Hauptfunktion des Clients ist unten. Die Funktion changeIPOrPort legt die Server-IP-Adresse und den Port fest und funktioniert einwandfrei, da der Server die Client-Nachricht empfängt. Ich kann den Servercode bei Bedarf auch veröffentlichen.

int main() { 

int client_fd, numbytes = 0; 
//int quit = 0; 
struct sockaddr_in their_addr; 
char response[MAXDATASIZE] = ""; 
char buf[MAXDATASIZE] = ""; 
size_t len = 0; 

/* Server config*/ 
their_addr.sin_family = AF_INET; 
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero); 
printf("Configuring the server\n"); 
changeIPOrPort(&their_addr); 


printf("Hello! please input letters to know things about me.\n"); 
printf("Each character will give you a piece of information about me\n"); 
printf("%s\n", serviceInfo); //info string "UI"... 

/*create client socket*/ 
client_fd = socket(AF_INET, SOCK_STREAM, 0); 

if(connect(client_fd, (struct sockaddr *)&their_addr, sizeof(their_addr)) < 0) { 
    printf("\n Error : Connect Failed \n"); 
    return 1; 
} 

if(!fgets(response, sizeof (response), stdin)) { 
    printf("Error reading line.\n"); 
} 
else { 
    len = strlen(response); 
    if(response[len - 1] == '\n') { 
     response[len - 1] = '\0'; 
    } 
    printf("You entered the characters:%s\n", response); 
    printf("sending...\n"); 
    send(client_fd, response, len, 0); 

    numbytes = recv(client_fd, buf, strlen(buf), 0) ; 
    if(numbytes < 0) { 
     printf("Error receiving from server, quitting\n"); 
     exit(1); 
    } 
    else { 
     printf("Number of bytes received: %d\n", numbytes); 
     buf[numbytes] = '\0'; 
     printf("%s\n", buf); 
     printf("This is errno\n", errno); 
    } 
} 
close(client_fd); 
return 0; 
} 
+0

Was die tatsächlichen symptomps Fehler ist? – SergeyA

+0

Die 'recv'-Funktion blockiert nicht, immer noch' numbytes = 0'. – FSB

+0

Ich frage mich, was 'strlen (buf)' zurückgibt, wenn buf mit 'char buf [MAXDATASIZE] = ""; " ? –

Antwort

2

Ersetzen 'strlen (buf)' mit 'sizeof (buf) -1'