Socket/Network Library



  • darf man das ergebnis sehen? ich weiß nicht wie du das meinst. 🤡

    pollst du die sockets etwa und erzeugst damit 100% CPU Auslastung?



  • c. schrieb:

    darf man das ergebnis sehen? ich weiß nicht wie du das meinst. 🤡

    pollst du die sockets etwa und erzeugst damit 100% CPU Auslastung?

    Fast, ca. 94%. 😃
    Ich hab später aber noch haufenweise anderes Zeug in der Main-Schleife, desshalb macht das nichts.
    Außerdem bau ich eine Modulo Abfrage je nach Framerate für den Aufruf der Netzwerkfunktionen ein.

    Der Testcode sieht so aus... (Rein Technisch und alles so runtergerattert 🙄 )

    //#pragma comment (lib,"ws2_32.lib");
    
    #include <windows.h>
    //#include <winsock2.h>
    #include <stdio.h>
    
    #include <list>
    
    //Prototypen
    int startWinsock(void);
    
    int main()
    {
      long rc;
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      SOCKADDR_IN addr;
      char buf[256];
      char buf2[300];
      int iMode = 1;
    
      // 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=inet_addr("127.0.0.1");
    
      ioctlsocket(acceptSocket,FIONBIO,(u_long FAR*) &iMode);
      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
      while(1)
      {
          connectedSocket=accept(acceptSocket,NULL,NULL);
          if(connectedSocket==INVALID_SOCKET)
          {
            if(WSAGetLastError()==WSAEWOULDBLOCK) continue;
            printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
            system("pause");
            return 1;
          }
          else
          {
            printf("Neue Verbindung wurde akzeptiert!\n");
            break;
          }
      }
      //system("pause");
      // Daten austauschen
      while(rc!=SOCKET_ERROR || WSAGetLastError()==WSAEWOULDBLOCK)
      {
        rc=recv(connectedSocket,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          if(WSAGetLastError()==WSAEWOULDBLOCK) continue;
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          break;
        }
        buf[rc]='\0';
        printf("Client sendet: %s\n",buf);
        sprintf(buf2,"Du mich auch %s",buf);
        rc=send(connectedSocket,buf2,strlen(buf2),0);
      }
      system("pause");
      closesocket(acceptSocket);
      closesocket(connectedSocket);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    (Kommuniziert zb. mit dem C-Worker.ch Standard-Client aus Tutorial 1)

    EDIT: Pardon, da sieht man noch garnichts von der genannten Architektur.
    EDIT: Ich brauch noch ein weilchen um die Lib fertig zu stellen, dann Poste ich EDIT: bei bedarf ein paar Codeschnippsel.


Anmelden zum Antworten