Server läuft nicht
-
/includier noch Winsock2.h und die Lib Ws2_32 [OK] #include <windows.h> #include <iostream> #include <WinSock2.h> #pragma comment(lib,"Ws2_32.lib") #pragma comment(lib,"wsock32.lib") //#pragma comment(lib,"libws2_32.a") //#pragma comment(lib,"libwsock32.a") //C:\Programme aus dem netz\Dev-Cpp\lib #define SERVER_PORT 20000 int main(void) { WSADATA wsa; static struct sockaddr_in sa; SOCKADDR_IN ca; fd_set rfds; struct timeval tv; // WSAStartup ist obligatorisch if(WSAStartup(MAKEWORD(2,0),&wsa)!=0) { std::cerr << "WSAStartup failure" << std::endl; WSACleanup(); return 1; } SOCKET Server, Client; Server = socket(AF_INET,SOCK_STREAM,0); if(Server==INVALID_SOCKET) { std::cerr << "Server Socket creation failed" << std::endl; WSACleanup(); return 1; } sa.sin_family=AF_INET; sa.sin_port=htons(SERVER_PORT); sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY); // Hier wird die adresse mit dem socket gebunden if(bind(Server,(SOCKADDR*)&sa,sizeof(SOCKADDR_IN))==SOCKET_ERROR) { std::cerr << "Server Socket bind failed" << std::endl; WSACleanup(); return 1; } // Setze Socket auf "Warte auf Verbindungen" if(listen(Server,5)==SOCKET_ERROR) { std::cerr << "Server Socket listen failed" << std::endl; WSACleanup(); return 1; } bool connection = false; for(;;) // Auf Verbindungen warten { // Timeout des Sockets setzen FD_ZERO(&rfds); FD_SET(Server, &rfds); tv.tv_sec = 2; // 2 Sekunden tv.tv_usec = 0; int iSelect = select( ((int)Server)+1, &rfds, NULL, NULL, &tv); if( SOCKET_ERROR == iSelect ) { std::cerr << "Fehler: select fehlgeschlagen" << std::endl; WSACleanup(); return 1; } if(FD_ISSET(Server,&rfds)) // Wenn Daten/Verbindung da sind/ist { if(connection) // Ja wir haben eine Verbindung { char cmd[501]; int readen = recv(Client,cmd,500,0); cmd[readen] = '\0'; std::cout << "Empfang von " << readen << "Bytes: " << cmd << std::endl; } else //if(connection) { Client = accept(Server,NULL,NULL); if(INVALID_SOCKET == Client) { std::cerr << "Accepting Connection failed" << std::endl; Client = 0; } else //if(INVALID_SOCKET == Client) { connection = true; // nun haben wir eine Verbindung! }//if(INVALID_SOCKET == Client) }//if(connection) }//if(FD_ISSET(Server,&rfds)) }//for(;;) if(connection) closesocket(Client); closesocket(Server); WSACleanup(); return 0; }
Der Client sendet zwar die Zeichen, aber den Server empfängt sie nicht (es wird nichts angezeigt)
Könnt ihr meir helfen
-
Ich vermute mal es liegt, daran, dass dein select() vor accept() kommt nachdem bei listen() eine Verbindungsanforderung eingegangen ist.