[WINSOCK] Recht simples Problem



  • Hi 🙂

    Folgender Code funzt nicht und er empfängt nie eine Antwort (Zur Info: Ich habe einen astrein funktionierenden lokalen Webserver):

    #include <stdio.h>
    #include "winsock.h"
    
    #define DEBUG
    
    int main()
    {
    	const char ip[]         = "127.0.0.1";
    	const unsigned int port = 80;
    	const char sendbuf[]    = "GET / HTTP/1.1";
    
    	char recvbuf[64] = "";
    
    	// Initialisierung von Winsock
    	WSADATA wsadata;
    	if(WSAStartup(MAKEWORD(1,1), &wsadata) == NO_ERROR)
    	{
    		#ifdef DEBUG
    			printf("Winsock initialisiert.\n");
    		#endif
    
    		// Erstellen eines Sockets
    		SOCKET sock;
    	    sock = socket(PF_INET, SOCK_STREAM, 0);
    		if(sock != INVALID_SOCKET)
    		{
    			#ifdef DEBUG
    			printf("Socket erfolgreich erstellt.\n");
    			#endif
    
    			sockaddr_in server;		
    
    			if((server.sin_addr.S_un.S_addr = inet_addr(ip)) != INADDR_NONE)
    			{
    				#ifdef DEBUG
    					printf("IP-Adresse gueltig.\n");
    				#endif
    
    				server.sin_family = PF_INET;
    				server.sin_port   = htons(port);
    
    				// Connectvorgang zum Socket
    				if(connect(sock, (SOCKADDR*)&server, sizeof(server)) != SOCKET_ERROR)
    				{
    					#ifdef DEBUG
    						printf("Connection zum Socket hergestellt.\n");
    					#endif
    
    					int sentbytes;
    
    					// Senden des Befehls
    					sentbytes = send(sock, sendbuf, sizeof(sendbuf), 0);
    
    					if(sentbytes > 0)
    					{
    						#ifdef DEBUG
    							printf("Befehl gesendet.\n");
    						#endif
    
    						int recvbytes = 1;
    						char recvbuf[64];
    
    						// Empfangen der Antwort
    						do
    						{
    							recvbytes = recv(sock, recvbuf, sizeof(recvbuf), 0);							
    						} while(recvbytes > 0);
    
    						#ifdef DEBUG
    							printf("Antwort erhalten.\n");
    						#endif
    
    						#ifdef DEBUG
    							printf("\nResultat des Ablaufs:\n");
    							printf("IP-Adresse: %i \n", ip);
    							printf("Gesendete Bytes: %i \n", sentbytes);
    							printf("Empfangene Bytes: %i \n", recvbytes);
    							printf("Gesendete Nachricht: %s \n", sendbuf);
    							printf("Erhaltene Antwort: %s \n", recvbuf);
    						#endif
    					}
    				}
    			}
    		}
    		closesocket(sock);
    		WSACleanup();
    	}
    
    	#ifdef DEBUG
    		printf("\nProgrammende.\n\n");
    	#endif
    
    	return(0);
    }
    

    Das Programm bleibt nach der Ausgabe von "Befehl gesendet." stehen und macht nicht weiter. Warum geht das so nicht?

    Danke für eure Hilfe!

    MfG



  • Hi,

    da muss noch ein \n\n dahinter, sonst wartet der Webserver auf weitere Daten...
    also "GET / HTTP/1.1\n\n"



  • Wow, echt vielen vielen Dank :).

    Wieso muss es immer an solchen Kleinigkeiten liegen. 😃


Anmelden zum Antworten