Servercode melded id error - win10



  • Hallo
    ich hatte heute auf meiner festplatte nen server/client beispiel wieder gefunden und wollte es ausführen:

    Problem: id error - und es pop die makefile.h auf

    $(BIN): (OBJ)(OBJ) (CC) $(LINKOBJ) -o $(BIN) $(LIBS)

    hier der code

    ////////////////////////////
    //   Server               // 
    ////////////////////////////
    #include <winsock2.h>
    
    #include <windows.h>
    #include <stdio.h>
    
    #pragma comment(lib, "Ws2_32.lib")
    
    //Prototypen
    int startWinsock(void);
    
    int main()
    {
      long rc;
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      SOCKADDR_IN server;
      char buf[256];
      char buf2[300];
    
      // Winsock starten
      rc=startWinsock();
    
      // Socket erstellen
      acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    
      // Socket binden
      memset(&server,0,sizeof(SOCKADDR_IN));
      server.sin_family=AF_INET;
      server.sin_port=htons(60987);
      server.sin_addr.s_addr=ADDR_ANY;
      rc=bind(acceptSocket,(SOCKADDR*)&server,sizeof(SOCKADDR_IN));
    
      // In den listen Modus
      rc=listen(acceptSocket,10);
    
      // Verbindung annehmen
      connectedSocket=accept(acceptSocket,NULL,NULL);
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
    
        rc=recv(connectedSocket,buf,256,0);
    
        printf("\n",buf);
    
        buf[rc]='\0';
    
        printf("Server: ");
    
        gets(buf2);
    
        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);
    }
    

    -> was ist da los ..
    liegt das an windows 10 ?



  • schrittweise debuggen



  • Danke hat geklappt !
    hatte die -lws2_32 in linker vergessen

    Hier das ganze Beispiel - hatte ich mal irgendwo vor paar jahren gefunden
    und es nicht vorenthalten 😉

    -> open your port in the Firewall or use port 8888
    -> Client connect to server -
    so Client Need the ip (find out your ip or use 127.0.0.1)

    ////////////////////////////
    //   Server               // 
    ////////////////////////////
    #include <winsock2.h>
    #include <windows.h>
    #include <stdio.h>
    
    // add linker:-lws2_32
    
    #pragma comment(lib, "Ws2_32.lib")
    
    //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();
    
      // Socket erstellen
      acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    
      // Socket binden
      memset(&addr,0,sizeof(SOCKADDR_IN));
      addr.sin_family=AF_INET;
      addr.sin_port=htons(60982);
      addr.sin_addr.s_addr=ADDR_ANY;
      rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    
      // In den listen Modus
      rc=listen(acceptSocket,10);
    
      // Verbindung annehmen
      connectedSocket=accept(acceptSocket,NULL,NULL);
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
    
        rc=recv(connectedSocket,buf,256,0);
    
        printf("\n",buf);
    
        buf[rc]='\0';
    
        printf("Server: ");
    
        gets(buf2);
    
        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);
    }
    

    und der Client

    ////////////////////////////
    //   Client               // 
    ////////////////////////////
    
    #include <winsock2.h>
    #include <windows.h>
    #include <stdio.h>
    
    // add linker:-lws2_32
    
    #pragma comment(lib, "Ws2_32.lib")
    
    int startWinsock(void);
    
    char befehl1[] = { "pc_down" }; 
    char befehl2[] = { "pc_view" }; 
    
    int main()
    {
      long rc;
    
      SOCKET s;
    
      SOCKADDR_IN addr;
    
      char buf[256];
      char buf2[300];
    
      // Winsock starten
      rc=startWinsock();
    
      // Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
    
      // Verbinden
      memset(&addr,0,sizeof(SOCKADDR_IN)); 
      addr.sin_family=AF_INET;
      addr.sin_port=htons(60982); 
      addr.sin_addr.s_addr=inet_addr("127.0.0.1"); 
    
      rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
    
        printf(buf,"Hallo Server ",buf);  
        send(s,buf,strlen(buf),0);
        buf[rc]='\0';
    
        rc=recv(s,buf,256,0);
    
        buf[rc]='\0';
    
        if((strcmp(befehl1, buf)) == 0)
        {
         Sleep(1000);
         system("cls");
    
         Sleep(1000);
         printf(".");                
    
         Sleep(1000);
         printf(".");                
    
         Sleep(1000);
         printf(".");                
    
         printf("Befehl wird ausgeführt\n");
         buf[rc]='\0';
        } 
    
        printf("\nServer antwortet: %s\n",buf);
    
      }
    
      closesocket(s);
      WSACleanup();
      Sleep(1000);
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    Have Fun

    .. und keine böhsen Sachen mit machen
    (wie rückwertsabfragen oder so:) if text = ... dann ...) :DDD



  • Danke hat geklappt !

    Ach wirklich?
    Was ist dein Kriterium für "hat geklappt"?
    Ich nehme mal an, der Compiler hat (mit vielen Warnungen, die du ignoriert hast) übersetzt und ein Testlauf mit Spieldaten unter deiner privaten Testumgebung hat "funktioniert", d.h. du hast deine Erwartungen erfüllt gesehen.
    Das hat überhaupt nichts zu sagen.
    Der Code ist kompletter Schrott.

    hatte ich mal irgendwo vor paar jahren gefunden

    Das sieht man.

    Der Code ist Schrott und sollte deswegen hier im Forum nicht verbleiben, andere Leute könnten später diesen Unsinn übernehmen und weiterverbreiten.

    printf("\n",buf);
    ...
    gets(buf2);
    ...
    printf(buf,"Hallo Server ",buf);
    ...
    rc=recv(connectedSocket,buf,256,0);
    buf[rc]='\0'; /* UB wenn rc == 256 oder -1 */
    
    u.v.a.m.
    

Anmelden zum Antworten