winsock
-
Hallo ich hab mir mal den Server aus dem Winsock Tutorial hier runter geladen.
http://www.c-worker.ch/tuts/wstut_op.phpAls ich den Compilieren wollte bekamm ich diese Fehlermeldungen hier

Erzeugen
[C++ Fehler] winsock2.h(109): E2238 Bezeichner 'fd_set' mehrfach deklariert
[C++ Fehler] winsock.h(54): E2344 'fd_set' bereits deklariert
[C++ Fehler] winsock2.h(112): E2146 Bezeichner zur Vervollständigung der Deklaration erforderlich
[C++ Warnung] winsock2.h(144): W8017 Redefinition von 'FD_SET' ist nicht identisch
[C++ Fehler] winsock2.h(153): E2238 Bezeichner 'timeval' mehrfach deklariert
[C++ Fehler] winsock.h(97): E2344 'timeval' bereits deklariert
[C++ Fehler] winsock2.h(209): E2238 Bezeichner 'hostent' mehrfach deklariert
[C++ Fehler] winsock.h(153): E2344 'hostent' bereits deklariert
[C++ Fehler] winsock2.h(222): E2238 Bezeichner 'netent' mehrfach deklariert
[C++ Fehler] winsock.h(166): E2344 'netent' bereits deklariert
[C++ Fehler] winsock2.h(229): E2238 Bezeichner 'servent' mehrfach deklariert
[C++ Fehler] winsock.h(173): E2344 'servent' bereits deklariert
[C++ Fehler] winsock2.h(241): E2238 Bezeichner 'protoent' mehrfach deklariert
[C++ Fehler] winsock.h(185): E2344 'protoent' bereits deklariert
[C++ Fehler] winsock2.h(327): E2238 Bezeichner 'in_addr' mehrfach deklariert
[C++ Fehler] winsock.h(269): E2344 'in_addr' bereits deklariert
[C++ Fehler] winsock2.h(385): E2238 Bezeichner 'sockaddr_in' mehrfach deklariert
[C++ Fehler] winsock.h(319): E2344 'sockaddr_in' bereits deklariert
[C++ Fehler] winsock2.h(395): E2238 Bezeichner 'WSAData' mehrfach deklariert
[C++ Fehler] winsock.h(329): E2344 'WSAData' bereits deklariert
[C++ Fehler] winsock2.h(411): E2146 Bezeichner zur Vervollständigung der Deklaration erforderlich
[C++ Warnung] winsock2.h(455): W8017 Redefinition von 'SO_DONTLINGER' ist nicht identisch
[C++ Warnung] winsock2.h(512): W8017 Redefinition von 'AF_IPX' ist nicht identisch
[C++ Warnung] winsock2.h(540): W8017 Redefinition von 'AF_MAX' ist nicht identisch
[C++ Fehler] winsock2.h(546): E2238 Bezeichner 'sockaddr' mehrfach deklariert
[C++ Fehler] winsock.h(492): E2344 'sockaddr' bereits deklariert
[C++ Fehler] winsock2.h(586): E2238 Bezeichner 'sockproto' mehrfach deklariert
[C++ Fehler] winsock.h(501): E2344 'sockproto' bereits deklariert
[C++ Fehler] winsock2.h(625): E2238 Bezeichner 'linger' mehrfach deklariert
[C++ Fehler] winsock2.h(625): E2228 Zu viele Fehlermeldungen oder Warnungen#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); 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); }
-
Hab den Fehler gefunden. Das
#include <windows.h>musste raus.
Aber wieso macht der das in das Tutorial wenn das doch damit nicht funktioniert O_o mhhm
-
windows.h immer nach die winsock.h Datei, dann geht das.

-
Jo geht auch thx :>
Hab ein neues Problem^^
Ich hab den Server mal etwas verändert so das man z.b. vom Client Dos Befehle an den Server senden kann das funktioniert auch ganz gut.
Aber wenn ich im client z.b. eingeben mspaint dann wird mspaint auch gestartet
aber wenn ich einen neuen Befehl an den Server senden will dann muss ich erst Paint wieder schließen kann man das irgedwie umgehen das ich auch wenn Paint geöffnet ist noch andere Befehle an den Server senden.Hier ist der Source Code:
#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; } system(buf); printf("Client sendet: %s\n",buf ); sprintf(buf2,"Folgender Befehl wurde ausgefuehrt %s",buf ); rc=send(connectedSocket,buf2,strlen(buf2),0); } closesocket(acceptSocket); closesocket(connectedSocket); WSACleanup(); system("PAUSE"); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
-
Weiss den keiner wie das gehen könnte

-
z.B. CreateProcess
oder ShellExecutedu solltest noch irgendein Zeichen als Kommando-Ende-Zeichen machen und zusehen das du das auch empfangen hast statt zu hoffen das recv() das komplette Kommando jeweils in einem Rutsch eingelesen hat.