mein Programm funktioniert nicht!!!



  • Hi Leute ich hab mich jetzt mit Sockets beschäftigt und ein Programm geschrieben:

    main.cpp:

    #include <winsock.h>
    #include <conio.h>
    #include "sock.h"
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        long re;
    
        re = startWinsock();
    
        cout << "Start Server:\n" << endl;
    
        if(re != 0)
        {
              cout << "  - Fehler beim Start von Winsock:" << re << endl;
        }
        else
        {
              cout << "  - Winsock gestartet!" << endl;
        }
    
        re = creatWinsock();
    
        if(re == INVALID_SOCKET)
        {
              cout << "  - Der Socket konnte nicht erstellt werden! Fehler Code: " << fehler() << endl;
        }
        else
        {
              cout << "  - Socket wurde erstellt!" << endl;
        }
    
        re = bindWinsock();
    
        if(re == SOCKET_ERROR)
        {
              cout << "  - Fehler! Bind, Fehler Code: " << fehler() << endl;
        }
        else
        {
              cout << "  - Socket an Port 100 gebunden!" << endl;
        }
    
        re = listenWinsock();
    
        if(re == SOCKET_ERROR)
        {
              cout << "  - Fehler! listen Mode, Fehler Code: " << fehler() << endl;
        }
        else
        {
              cout << "  - acceptSocket ist im listen Modus..." << endl;
        }
    
        getch();
        return 0;
    }
    

    und sock.h:

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <conio.h>
    #include <stdio.h>
    
    using namespace std;
    
    long rc;
    SOCKET s;
    SOCKADDR_IN addr;
    SOCKET acceptSocket;
    SOCKET connectedSocket;
    
    int fehler()
    {
        return WSAGetLastError();
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    
    int creatWinsock()
    {
    
        s=socket(AF_INET,SOCK_STREAM,0);
    
        return s;  // liefert bei Fehler INVALID_SOCKET zurück
    }
    
    int connectWinsock(char *adresse, int port)
    {
    
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
    
        addr.sin_family=AF_INET;
    
        addr.sin_port=htons(port); // parameter von port verwenden
    
        addr.sin_addr.s_addr=inet_addr(adresse); // parameter von adresse verwenden
    
        rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
        return rc;  // liefert bei Fehler SOCKET_ERROR zurück
    }
    
    int bindWinsock()
    {
         memset(&addr,0,sizeof(SOCKADDR_IN));
    
         addr.sin_family=AF_INET;
    
         addr.sin_port=htons(12345);
    
         addr.sin_addr.s_addr=INADDR_ANY;
    
         rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    
         return rc; // liefert bei Fehler SOCKET_ERROR zurück
    }
    
    int listenWinsock()
    {
        rc=listen(acceptSocket,10); // 10 = wie viele Verbindugen ausstehen dürfen
    
        return rc; // liefert bei Fehler SOCKET_ERROR zurück
    }
    
    int acceptWinsock()
    {
        connectedSocket=accept(acceptSocket,NULL,NULL);
    
        return connectedSocket; // liefert bei Fehler  INVALID_SOCKET zurück
    
    }
    

    So wenn ich Compliere und es auführe kommt in der Console das:

    Start Server:
    
      - Winsock gestartet!
      - Socket wurde erstellt!
      - Fehler! bind, Fehler Code: 10038
      - Fehler! listen Mode, Fehler Code: 10038
    

    so was ist da schief gelaufen? Ich möchte gerne weiter schreiben... aber ich kann leider nicht weil das Program am ende sowie so nicht weiter läuft.. der fehler ist in der Funktion: "bindWinsock()" soviel weis ich schon!

    Bitte helft mir!!! 🙂

    mfg Chris



  • 10038 ist WSAENOTSOCK. Das liegt schlicht und einfach daran, dass du in start und create mit s arbeitest, und in bind plötzlich mit acceptSocket.



  • AhA...

    Vielen Dank für die schnell Antwort es funtioniert jetzt endlich...

    👍 😃 🙂

    *freu*

    mfg Chris


Anmelden zum Antworten