Fenster wird automatisch geschlossen, wenn Verbindung über Sockets hergestellt wird



  • Ich hab hier einmal den Client:

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <winsock2.h>
    #include <vcl.h>
    #pragma hdrstop
    #include <iostream.h>
    #pragma argsused
    
    //Prototypen
    
    int startWinsock(void);
    
    int main()
    
    {
    
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
    
      char buf[256];                       // Anzahl Zeichen, die gesendet werden
      char conIP[15] = "10.17.126.4";        // Ziel-IP Adresse
      int conPort = 12345;                   // Verwendeter Port
    
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzen
      addr.sin_family=AF_INET;
      addr.sin_port=htons(conPort);        // htons() = Konvertierung für Netzwerk
      addr.sin_addr.s_addr=inet_addr(conIP);
    
      rc=startWinsock();
    
      if(rc!=0)
      {
        cout << "Fehler: startWinsock, Fehlercode: " << rc << "\n";
        return 1;
      }
      else
      {
        cout << "Winsock gestartet!\n";
      }
    
      s=socket(AF_INET,SOCK_STREAM,0);
    
      if(s==INVALID_SOCKET)
      {
        cout << "Fehler: Der Socket konnte nicht erstellt werden, Fehlercode: " << WSAGetLastError() << "\n";
        return 1;
      }
      else
      {
        cout << "Socket erstellt!\n";
      }
    
      rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
      if(rc==SOCKET_ERROR)
      {
        cout << "Fehler: konnte nicht verbunden werden, Fehlercode: " << WSAGetLastError() << "\n";
      }
      else
      {
        cout << "Verbunden mit " << conIP << "\n";
        strcpy(buf,"Hallo wie gehts?");
    
        rc=send(s,buf,9,0);
    
        if (rc == -1) cout << "Fehler: Nachricht konnte nicht gesendet werden, Fehlercode: " << WSAGetLastError() << "\n";
        else cout << "Nachricht wurde gesendet\n";
    
        rc=recv(s,buf,256,0);
        if (rc == -1) cout << "Fehler: Nachricht konnte nicht empfangen werden, Fehlercode: " << WSAGetLastError() << "\n";
        else cout << "Nachricht empfangen: " << rc << "\n";
      }
    
      getchar();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    und hier den Server

    #include <stdio.h>
    #include <windows.h>
    #include <winsock.h>
    #include <vcl.h>
    #pragma hdrstop
    #include <iostream.h>
    #pragma argsused
    
    //Prototypen
    
    int startWinsock(void);
    
    int main()
    
    {
      long rc;
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      SOCKADDR_IN addr;
    
      // char buf[256];                   // Anzahl Zeichen, die gesendet werden
      int conPort = 12345;                  // Port
    
      memset(&addr,0,sizeof(SOCKADDR_IN));
      addr.sin_family=AF_INET;
      addr.sin_port=htons(conPort);
      addr.sin_addr.s_addr=INADDR_ANY;
    
      rc=startWinsock();
    
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }
    
      acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    
      if(acceptSocket==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Socket erstellt!\n");
      }
    
      rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    
      if(rc==SOCKET_ERROR)
      {
        printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        cout << "Socket an Port " << conPort << " gebunden\n";
      }
    
      rc=listen(acceptSocket,10);
    
      if(rc==SOCKET_ERROR)
      {
        printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("acceptSocket ist im listen Modus....\n");
      }
    
      connectedSocket=accept(acceptSocket,NULL,NULL);
    
      if(connectedSocket==INVALID_SOCKET)
      {
        printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Neue Verbindung wurde akzeptiert!\n");
      }
    
      return 0;
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    

    Wenn ich an dem einen PC jetzt den Server starte, so dass er im Listen Modus ist und auf dem andern den Client aufrufe, schließt sich das Server Fenster automatisch.
    Als Ausgabe kommt beim Client:

    Winsock gestartet!
    Socket erstellt!
    Verbunden mit 10.17.126.4
    Nachricht wurde gesendet
    Fehler: Nachricht konnte nicht empfangen werden, Fehlercode: 10054

    Aber wieso schließt sich das Fenster einfach?



  • vielleicht sollte dein server dann auch einfach warten wenn er ne neue Verbindung bekommt und net einfach beenden 😉

    }
      else
      {
        printf("Neue Verbindung wurde akzeptiert!\n");
      }
    
      return 0;
    }
    


  • lol, wie schlecht, in dem fall sry für sinnlos post ^^
    😃 😃 😃 😉


Anmelden zum Antworten