Windows > Socket-Programmierung > kann nicht compilieren



  • Hey zam,

    bin gerade in die welt der socket-programmierung eingestiegen und nach 3 h rumtüfteln platzt mir bald der kragen. Ich geb euch einfach mal meinen source und ihr könnt ja mal reinschauen, ob ihr fehler findet. Programmiere in Visual C++ 6.0:

    #include <stdio.h>
    #include <winsock.h>
    #include <io.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    
    	WSADATA wsaData;
    	if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0)
    	{
    		fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
    		exit (EXIT_FAILURE);
    	}
    
    	/*
    	**
    	** Socket vom System beziehen */
    
    	int sockfd = socket (AF_INET, SOCK_STREAM, 0);
    	if (sockfd == -1)
    	{
    		perror ("Fehler beim Erstellen des Sockets:");
    		return 1;
    	}
    
    	/*
    	**
    	** Set connection details */
    
    	struct sockaddr_in serv_addr;
    	serv_addr.sin_family = AF_INET;
    	serv_addr.sin_port = htons(80);								//htons() > wandelt Host Byteorder nach Network Byteorder um (Big Endian)
    	serv_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");	//inet_addr() > wandelt IP in Network Byteorder um
    
    	if connect(sockfd, (sockaddr*) &serv_addr, sizeof(sockaddr)) == -1)
    	{
    		perror ("Fehler beim Verbindungsaufbau:");
    	}
    
    	//return 0;
    }
    

    Hier das Error-Log:

    Kompilierung läuft...
    socket_prog.c
    E:\BA\Informatik\socket_prog\socket_prog.c(24) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    E:\BA\Informatik\socket_prog\socket_prog.c(25) : error C2065: 'sockfd' : nichtdeklarierter Bezeichner
    E:\BA\Informatik\socket_prog\socket_prog.c(28) : warning C4098: 'main' : 'void'-Funktion gibt einen Wert zurueck
    E:\BA\Informatik\socket_prog\socket_prog.c(36) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
    E:\BA\Informatik\socket_prog\socket_prog.c(37) : error C2065: 'serv_addr' : nichtdeklarierter Bezeichner
    E:\BA\Informatik\socket_prog\socket_prog.c(37) : error C2224: Der linke Teil von '.sin_family' muss eine Struktur/Union sein
    E:\BA\Informatik\socket_prog\socket_prog.c(38) : error C2224: Der linke Teil von '.sin_port' muss eine Struktur/Union sein
    E:\BA\Informatik\socket_prog\socket_prog.c(39) : error C2224: Der linke Teil von '.sin_addr' muss eine Struktur/Union sein
    E:\BA\Informatik\socket_prog\socket_prog.c(42) : error C2061: Syntaxfehler : Bezeichner 'connect'
    E:\BA\Informatik\socket_prog\socket_prog.c(48) : error C2059: Syntaxfehler : '}'
    Fehler beim Ausführen von cl.exe.

    socket_prog.exe - 9 Fehler, 1 Warnung(en)

    Also wie man sieht ein sehr fundamentaler code, der noch keine großartigen funktionalitäten besitzt, aber das soll sich ja noch ändern.

    Wenn man sich allein die erste fehlermeldung anschaut, müsste ja irgendwo überhalb von zeile 24 schon ein ";" fehlen? Ich sehs aber wirklich nicht, vllt. bin ich ja blind.

    Also hab schon gegoogelt wie ein verrückter und auch die suchfunktion benutzt, jedoch ohne, dass es mir weitergeholfen hätte. Wäre für schnelle hilfe dankbar.

    --bin4ry



  • //EDIT:

    Vor dem connect-befehl fehlte natürlich eine öffnende klammer. Aber auch mit der kommen noch folgende fehler:

    In Zeile 24: Syntaxfehler: Fehlendes ';' vor 'type'
    In Zeile 25: 'sockfd' : nichtdeklarierter Bezeichner



  • wahrscheinlich benutzt du keinen 'C99' compiler, dann musst du alle variablen zuerst anlegen, bevor du die erste anweisung innerhalb eines {}-blocks aufrufst.

    nicht so:

    {
      bla();
      int x;
      x = 1;
      blubb(x);
    }
    

    sondern so:

    {
      int x;
      bla();
      x = 1;
      blubb(x);
    }
    ...
    

    🙂



  • Oh man, danke, du hast mich gerade vor einem nervenzusammenbruch gerettet. Thx so much



  • hm führt immernoch zum selben fehler, diesmal bezieht er sich auf 'sockaddr' - nichtdeklarierter bezeichner.

    Hab nun

    struct sockaddr_in serv_addr; auch ganz an den anfang der main methode geschrieben, ohne erfolg. Ich bin noch ziemlich noob in c, kannst du mir deshalb noch mal weiterhelfen?


Anmelden zum Antworten