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.