000
30.01.2004, 14:00 Uhr
RedEagle
|
vor etwa 5 Tagen habe "ich" mit hilfe von FloSoft diesen Server gebaut. er soll daten von einem Client empfangen, daoch das tut er nicht???? warum?? (der client gibt eine Bestätigung, das gesendet wurde)
C++: |
//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(Server,cmd,500,0); cmd[readen] = '\0'; std::cout << cmd << std::endl; //hir wird nichts ausgegeben !! ###################################### } 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; }
|
ps: es gibt keine warnungen/errors vom Compiler (er bleibt einfach irgendwo stecken der server) -- MFG RedEagle Dieser Post wurde am 30.01.2004 um 14:02 Uhr von RedEagle editiert. |