Win Sockets
-
Hallo, ich gucke mir gerade ein Win Socket Tutorial an und als ich den Souce Code kompiliert habe bekamm ich diese Fehlermeldungen ....
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 WarnungenDas Tutorial: http://www.c-worker.ch/tuts/wstut_op.php
Der Source Code:
#include <windows.h> #include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }hat vielleicht wer ein Tutorial was funktioniert ?
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
das tutorial von c-workers funktioniert, ich habe es selbst auch mal durchgearbeitet,...
nimm mal <windoof.h> raus, dann sollte es laufen,..
gruß
-
Ahhh jetzt gehts :xmas1:
thx
-
Server:
#include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; // 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"); } 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"); } 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"); } 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"); } system("PAUSE"); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }und da hätte ich noch eine frage ist das Tutorial überhaupt für den Einstieg in die Win Sock Programmierung geeignet ?
-
ach mom da fehlt was -.-
-
toll mein source code is angeblich spam also der vom clinet -.-
-
Eigentlich sollte bei dem Client folgendes stehen:
Winsock gestartet!
Socket erstellt!
Verbunden mit 127.0.0.1..aber da steht immer:
Fehler: connect gescheitert, fehler code: 10061
halt der Fehlercode
-
Source Code vom client:
#include <winsock2.h>
#include <stdio.h>
//Prototypenint startWinsock(void);
int main(){
long rc;
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
// Winsock startenrc=startWinsock();
if(rc!=0)
{
printf("Fehler: startWinsock, fehler code: %d\n",rc);
return 1;
}
else
{
printf("Winsock gestartet!\n");
}
// Socket erstellenacceptSocket=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");
}
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");
}
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");
}
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");
}
system("PAUSE");
return 0;}
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
-
Ok, der source vom client sieht ok aus,..
trivialer weise erstmal ne frage: server gestartet??gruß
-
zeusosc schrieb:
Ok, der source vom client sieht ok aus,..
Ich würde sagen, der Code vom Client sieht genauso aus wie der Code des Servers...
-
Ja den Server hab ich gestartet.
-
Hier ist der Server:
#include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; // 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"); } 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"); } 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"); } 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"); } system("PAUSE"); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
-
Jo,...
stimmt, das was du als client gepostet hast ist in wirklichkeit der server,...da fehlt wohl das connect,..
edit: hier ein beispiel client (auch 127.0.0.1:12345)#include <winsock2.h> #include <stdio.h> #include <iostream> #include <string> #include <conio.h> #include <sstream> using namespace std; //Prototypen int startWinsock(void); string int_to_str(int i) { ostringstream ret; ret << i; return ret.str(); } string replace(string inputS, string oldC, string newS){ string retValS = ""; int pos = inputS.find(oldC); for(int i = 0; i < pos; ++i){ retValS += inputS[i]; } retValS += newS; for(int i = pos +1; i < inputS.length(); ++i){ retValS += inputS[i]; } return retValS; } int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; char buf2[4096]; string ip; ip=""; char lala[]={0x56,0x56,0x20,0x56,0x56}; // 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"); } printf("bitte geben sie die ip ein:\n"); cin>>ip; // 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(ip.c_str()); // zielrechner ist unser eigener 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 127.0.0.1..\n"); } for(int i=0;i<=sizeof(buf)-5;i++){buf[i]='1';} string temp; // Daten austauschen while(rc!=SOCKET_ERROR) { printf("\nZeichenfolge eingeben [max 256]: "); cin>>ip; /*ip=replace(ip," \0"," "); cout<<ip;*/ //for(int i=0; i<=20;i++){ //temp=ip.substr(i,256); int pos=ip.find(0x20); if(pos!=string::npos){ip[pos]='&';} cout<<pos<<":"<<ip; getch(); send(s,ip.c_str(),20,0); //send(s,buf,256,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); }gruß
-
Jetzt hats funktioniert

thx :xmas1: