Problem bei Server - Client Verbindung beim Senden



  • Hi,
    Verbindung herstellen etc. funktioniert alles, aber beim senden bzw. empfangen kommt immer nur die Anzahl der Zeichen die gesendet bzw. empfangen werden, also in dem Fall 256 und nicht der Text, der gesendet werden sollte:

    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[257];                       // Anzahl Zeichen, die gesendet werden
      char conIP[15] = "10.17.126.4";        // Ziel-IP Adresse
      int conPort = 54321;                   // 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?");
    
        while (rc != SOCKET_ERROR)
        {
          cin >> buf;
          send(s,buf,256,NULL);
    
          rc = recv(s,buf,256,NULL);
          cout << rc << "\n";
        }
      }
    
      getchar();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    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];                        // Nachricht zum Versenden
      int conPort = 54321;                  // 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");
      }
      while (rc != SOCKET_ERROR)
      {
        rc=recv(connectedSocket,buf,256,NULL);
        cout << rc << "\n";
    
        cin >> buf;
        send(connectedSocket,buf,256,NULL);
      }
    
      getchar();
      return 0;
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    


  • Du übergibst auch immer 256 an send und nicht die Anzahl Zeichen die gesendet werden sollen 😕



  • hat nichts mit standart c++ zu tun.
    leute, ist das mit den unterforen so schwer?...

    sowas gehört ins winapi forum



  • rc=recv(connectedSocket,buf,256,NULL); 
        cout << rc << "\n";
    

    Du schreibst damit nur die Anzahl der empfangenen Zeichen in die Console.
    Es müsste heissen :

    rc=recv(connectedSocket,buf,256,NULL); 
        cout << buf << "\n";
    


  • ach so, jetzt versteh ichs, ist eigentlich logisch

    wegen den unterforen: sorry, ich finds echt ein bisschen kompliziert 😞



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply