Server soll befehle ausführen



  • Hey folgendes ich hab mir einen client und einen server gebastelt mit dem code aus nem tut und nun hab ich zwei probleme 1. wie krieg ich hin das man beim client die ip des servers angibt und 2. soll zb wenn ich eine 1 sende der server den befehl unter 1 bei einem switch ausführen... beides funzt aber net

    hier mal der client

    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    //Prototypen
    int startWinsock(void);
    char serverip[20];
    
    int main()
    {
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
      char ip;
    
      printf("Bitte Ziel-IP eingeben: ");
       scanf("%c",&ip);
       fflush(stdin);
    
      // Winsock starten
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }
    
      // Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
      if(s==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Socket erstellt!\n");
      }
    
      // Verbinden
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
      addr.sin_family=AF_INET;
      addr.sin_port=htons(12345); // wir verwenden mal port 12345
      addr.sin_addr.s_addr=inet_addr("127.0.0.1"); 
    
     /* Was muss ich nun anstatt "127.0.0.1" eingeben.. hab ja schon ne abfrage der ip am anfang mit char*/
    
      rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
      if(rc==SOCKET_ERROR)
      {
        printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Verbunden mit %c \n",ip);
      }
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
        printf("\nBitte Befehl eingeben: ");
        gets(buf);
        send(s,buf,strlen(buf),0);
        rc=recv(s,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          break;
        }
        buf[rc]='\0';
        printf("\nServer antwortet: %s\n",buf);
      }
      closesocket(s);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    und hier mal der server

    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    //Prototypen
    int startWinsock(void);
    
    int main()
    {
      long rc;
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      SOCKADDR_IN addr;
      char buf[256];
      char buf2[300];
    
      // Winsock starten
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }
    
      // Socket erstellen
      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");
      }
    
      // Socket binden
      memset(&addr,0,sizeof(SOCKADDR_IN));
      addr.sin_family=AF_INET;
      addr.sin_port=htons(12345);
      addr.sin_addr.s_addr=ADDR_ANY;
      rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
      if(rc==SOCKET_ERROR)
      {
        printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Socket an port 12345 gebunden\n");
      }
    
      // In den listen Modus
      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");
      }
    
      // Verbindung annehmen
      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");
      }
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
        rc=recv(connectedSocket,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          break;
        }
        buf[rc]='\0';
        printf("Client sendet: %s\n",buf);
    
          switch(buf) {
    
          case 8 :  printf("\n PC wird heruntergefahren \n\n");
                    system("C:\\WINDOWS\\System32\\shutdown.exe -s -f -t 0 ");  
                    break;                                 
    
          case 9 :  printf("\n Programm wird beendet \n");      break;
    
          default:  printf("\n Unbekannte Auswahl \n\n");
          }
        sprintf(buf2,"Du mich auch %s",buf);
        rc=send(connectedSocket,buf2,strlen(buf2),0);
      }
      closesocket(acceptSocket);
      closesocket(connectedSocket);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    Ich benutz win xp und borland compiler... und beim kompilieren vom server krieg ich den fehler das ich integer beim switch brauch.. und wenn ich zb case 'asd' nehme um auf char zuzugreifen gibts noch mehr fehler...

    ich denk mir die variable buf passt halt net aber wie und vorallem kann ich die passend umformatieren

    ich hoffe ma ihr könnt mir helfen weil ich hab echt keinen plan was ich noch mahcen soll... hab schon seit stunden daran rumgebastelt aber des will einfach funzen



  • sry ich hab leider doppelt gepostet un nun sin 2 gleiche threads auf



  • c/c++ neuling schrieb:

    sry ich hab leider doppelt gepostet un nun sin 2 gleiche threads auf

    und im falschen forum biste auch.


Anmelden zum Antworten