JMII89 Temat założony przez niniejszego użytkownika |
Serwer nie akceptuje połączenia » 2015-04-01 20:08:34 Witam, mam pewien problem . Otóż chodzi o to , że serwer nie akceptuje połączenia . Mam 2 programy które używają tego samego kodu aby oczekiwać na połączenia od clienta . Jednak mają inny port . Jeden program ma port 4004 a drugi 1337 więc nie rozumiem dlaczego to nie działa . void TServer::Start_Server() { int clients = 0; SOCKET Client[ MAX_USERS ]; TClient client; WSAData WSA; std::cout << "Initializing WSA " << std::endl; int result = WSAStartup( MAKEWORD( 2, 1 ), & WSA ); if( result ) { std::cout << "WSA Startup failed ! " << std::endl; Sleep( 3000 ); exit( 0 ); } SOCKET Listen = socket( AF_INET, SOCK_STREAM, 0 ); SOCKET Connect = socket( AF_INET, SOCK_STREAM, 0 ); SOCKADDR_IN Server; Server.sin_addr.s_addr = inet_addr( ip.c_str() ); Server.sin_family = AF_INET; Server.sin_port = htons( port ); result = bind( Listen,( SOCKADDR * ) & Server, sizeof( Server ) ); std::cout << "Trying to bind " << std::endl; if( result ) { std::cout << "Failed to bind ! " << std::endl; Sleep( 3000 ); exit( 0 ); } result = listen( Listen, SOMAXCONN ); std::cout << "Trying to listen " << std::endl; if( result ) { std::cout << "Failed to listen " << std::endl; Sleep( 3000 ); exit( 0 ); } int size = sizeof( Server ); std::cout << "Server connected ! " << std::endl; while( true ) { Client[ clients ] = accept( Listen,( SOCKADDR * ) & Server, & size ); std::cout << "Connection accepted from : " << inet_ntoa( Server.sin_addr ) << std::endl; client.ClientConnection( Client, clients ); clients++; } WSACleanup(); }
Ta pętla nigdy się nie wykonuje. Czy może to być spowodowane tym , że pierwszy program coś blokuje ? Bo ten pierwszy program działa i akceptuje połączenia a ten już nie. |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-04-01 21:16:04 Już wiem chyba dlaczego tak się dzieje . Bo nie używam wątków . Ale mam pytanie . Czy da się za pomocą _beginthread jakoś wysłać dwa argumenty do funkcji ? _beginthread(( void( __cdecl * )( void * ) ) client.ClientConnection, ?? ); |
|
C-Objective |
» 2015-04-04 10:54:15 Spróbuj użyć tych samych portów, natomiast jak chcesz to mogę ci podesłać mój opensource komunikator internetowy (Borland C++ 6). Tego samego kodu? To jak ma akceptować, jak to są dwa takie same programy |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-04-06 17:42:08 2 programy używają takiego samego kodu tylko do połączenia a do innych rzeczy innego a portów nie moge zmienić bo takie muszą być. |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-04-13 21:40:09 Refresh bo nie rozumiem dlaczego nie działa. |
|
DejaVu |
» 2015-04-15 19:26:03 Programy nie mogą mieć róznych portów. Oba programy powinny łączyć się na określonym porcie. Powinieneś w aplikacji określić port na którym ma odbywać się komunikacja, a nie pozwalać wybierać aplikacji losowy port, który nie jest jeszcze przez żadną aplikację używany. |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-04-15 21:25:27 On nie jest w żaden sposób losowy . Port jest wczytywany z pliku ini . Pozatym to jest login server i game server do gry. |
|
DejaVu |
» 2015-04-15 22:22:55 to napisz najprostszy mozliwy przyklad klient/serwer w oparciu o tcp. analizowanie kodu spagetti w polaczeniu z socketami winapi jest raczej zmudne i trzeba by bylo doczytac dokumentacje kazdej funkcji. |
|
« 1 » 2 |