2fast4you87
Erfahrenes Mitglied
Hallo Leute,
Habe mit das tutorial von http://www.zotteljedi.de angeguckt und habe die Socket Programmierung jetzt unter Windows und Unix programmiert. Nun bin ich seit 2 Tagen schon dabei einen Server mit Select zu programmieren. Aber ich bekomme es einfach nicht hin! Ich weiß was Select macht und kann, nur wie ich es in meinem Code implementiere weiß ich nicht.
Ich habe einen Server der mit accept wartet bis eine Verbindung ankommt, danach blockiert er mit der fkt recv() so lange bis er eine antwort vom Client bekommt. Nur das möchte ich nicht. Er soll nicht Blockieren !
Hier mal mein Code ....
Zum Schluss noch ein paar Daten.
Ich Programmiere unter Windows (wie man sicherlich am Code erkennen kann.), Benutze Vc++ 6.
Ich hoffe ihr könnt mir weiter helfen .
Habe mit das tutorial von http://www.zotteljedi.de angeguckt und habe die Socket Programmierung jetzt unter Windows und Unix programmiert. Nun bin ich seit 2 Tagen schon dabei einen Server mit Select zu programmieren. Aber ich bekomme es einfach nicht hin! Ich weiß was Select macht und kann, nur wie ich es in meinem Code implementiere weiß ich nicht.
Ich habe einen Server der mit accept wartet bis eine Verbindung ankommt, danach blockiert er mit der fkt recv() so lange bis er eine antwort vom Client bekommt. Nur das möchte ich nicht. Er soll nicht Blockieren !
Hier mal mein Code ....
Code:
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#pragma comment(lib,"wsock32.lib")
int startWinsock(void);
int main()
{
timeval Timeout;
Timeout.tv_sec = 5;
Timeout.tv_usec = 0;
fd_set fdSetRead;
FD_ZERO(&fdSetRead);
FD_SET(0,&fdSetRead);
long rc;
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
char buf[256];
rc=startWinsock();
if(rc!=0){
printf("Fehler: startWinsock, fehler code: %d\n",rc);
return 1;
}
else
printf("Winsock gestartet!\n");
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(22305);
addr.sin_addr.s_addr=INADDR_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 22305 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");
}
select(1,&fdSetRead,NULL,NULL,&Timeout);
int test = recv(connectedSocket,buf,sizeof(buf),0);
if(test > 0){
printf("blaaaaa");
}
closesocket(acceptSocket);
closesocket(connectedSocket);
WSACleanup();
return 0;
}
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
Zum Schluss noch ein paar Daten.
Ich Programmiere unter Windows (wie man sicherlich am Code erkennen kann.), Benutze Vc++ 6.
Ich hoffe ihr könnt mir weiter helfen .