Merkwürdiges Verhalten
-
Hallo,
Ich versuche einen Server zu entwickeln,dafür habe ich erstmal diese Main Methode geschrieben#include <netinet/in.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> static void echo(int client_socket) { char echo_buffer[1024]; int recv_size; time_t zeit; if((recv_size =recv(client_socket, echo_buffer, 1024,0)) < 0){ printf("Fehler bei recv()"); } echo_buffer[recv_size] = '\0'; printf("%s \n",echo_buffer); } int main( int argc, char *argv[]){ // defining need variables struct sockaddr_in server, client; memset( &server, 0, sizeof (server)); int portNumber=5000; int ipAdressOfServer=htonl(INADDR_ANY); unsigned int lenthOfStructurOfClient=sizeof(client); int socketOfServer,SocketOfClient; // creating a sockez socketOfServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (socketOfServer < 0){ printf("Socket coul not be created"); return 1; } // assigning server's properties server.sin_family = AF_INET; server.sin_addr.s_addr = htonl( ipAdressOfServer ); server.sin_port = htons( portNumber ); if(bind(socketOfServer,(struct sockaddr*)&server,sizeof(server))<0){ printf("binding failed \n"); return 1; } if(listen(socketOfServer, 2) == -1 ){ printf("The server can not list to connections any more"); return 1; } printf("the server is waiting for a meracle..."); for (;;) { SocketOfClient = accept(socketOfServer, (struct sockaddr*)&client, &lenthOfStructurOfClient); if (SocketOfClient < 0){ printf("The server couldn't get the message from the client"); } printf("The computer with the ip adress: %s sent a message\n", inet_ntoa(client.sin_addr)); echo( SocketOfClient ); close(SocketOfClient); } return 0; }
Problem ist aber,dass ich keine Ausgaben bekommen,,z.B die Ausgabe in Zeile 56,solange die endlose for Schleife da ist,obwohl diese Schleife hinter dem Ausgabebefehl kommt.
Jetzt wenn ich die for Schleife lösche funktioniert es wieder normal.
Habe ich das was übersehen oder wie ?Vielen Dank für eure Hilfe
-
stdout ist wahrscheinlich zeilengepuffert. Das Leeren des Stream-Zwischenspeichers an den jeweiligen Stellen sollte dein Problem lösen.
fflush(stdout);
-
EinGast schrieb:
stdout ist wahrscheinlich zeilengepuffert. Das Leeren des Stream-Zwischenspeichers an den jeweiligen Stellen sollte dein Problem lösen.
fflush(stdout);
Danke
-
char echo_buffer[1024]; int recv_size; time_t zeit; if((recv_size =recv(client_socket, echo_buffer, 1024,0)) < 0){ printf("Fehler bei recv()"); } echo_buffer[recv_size] = '\0';
Klassischer Fall von ahnungslosen Tutorialschreiberlingen, und daher hast du den Code sicher abgeschrieben:
UB wegen möglichem Zugriff auf undefinierten Speicher bei Strings > 1023, normalerweise macht man für Strings einfachenum{MAX_RECV=1024}; char echo_buffer[MAX_RECV+1]={0}; if((recv_size =recv(client_socket, echo_buffer, MAX_RECV,0)) < 0){ ...
und schon kann man auf den (wie man sieht fehlerträchtigen) expliziten Speicherzugriff verzichten und kommt ohne UB aus.