[winsock] problem z łączeniem się klientów do serwera
Ostatnio zmodyfikowano 2012-08-06 13:59
kubawal Temat założony przez niniejszego użytkownika |
[winsock] problem z łączeniem się klientów do serwera » 2012-08-04 21:45:03 Witam! Ostatnio chciałem sobie napisać serwer podobny do tego z kursu ( Trochę zaawansowane techniki) Oto kod: int main() { WSADATA wsadat; WSAStartup( MAKEWORD( 2, 2 ), & wsadat ); sockaddr_in my_addr; SOCKET listener; SOCKET max_fd; SOCKET new_fd; int addrlen = sizeof( sockaddr_in ); fd_set all_fds, read_fds; sockaddr_in new_addr; char comm_buf[ 7 ]; FD_ZERO( & all_fds ); FD_ZERO( & read_fds ); if(( listener = socket( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) { perror( "socket" ); exit(); } FD_SET( listener, & all_fds ); max_fd = listener; my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = htonl( INADDR_ANY ); my_addr.sin_port = htons( PORT ); memset( & my_addr.sin_zero, '\0', 8 ); if( bind( listener,( sockaddr * ) & my_addr, sizeof( my_addr ) ) == - 1 ) { perror( "bind" ); exit(); } if( listen( listener, 10 ) == - 1 ) { perror( "listen" ); exit(); } while( true ) { read_fds = all_fds; if( select( max_fd + 1, & read_fds, NULL, NULL, NULL ) == - 1 ) { perror( "select" ); exit(); } for( int i = 0; i < max_fd; i++ ) { if( FD_ISSET( i, & read_fds ) ) { if( i == listener ) { if(( new_fd = accept( i,( sockaddr * ) & new_addr, & addrlen ) ) == - 1 ) { perror( "accept" ); exit(); } FD_SET( new_fd, & all_fds ); if( new_fd > max_fd ) max_fd = new_fd; cout << "Nowe połączenie z " << inet_ntoa( new_addr.sin_addr ) << " na gnieździe " << new_fd << endl; } else { recv( i, comm_buf, 7 - 1, NULL ); if( CommandExecute( comm_buf, i ) == 3 ) { closesocket( i ); FD_CLR( i, & all_fds ); cout << "Gniazdo " << i << " zakończyło połączenie\n"; } } } } } WSACleanup(); return 0; }
Problem jest taki, że gdy klient próbuje się połączyć, to serwer nie reaguje. Z góry dziękuje za pomoc. |
|
RazzorFlame |
» 2012-08-05 12:47:31 A podłączasz clienty do dobrego portu? BTW. tu masz dobry bardzo kurs winsock (nie przecze ze tu tez jest super): http://win32developer.com |
|
pekfos |
» 2012-08-05 12:49:14 Port odblokowany? Komputery są w sieci lokalnej? Podajesz prawidłowy adres? Jeśli nie są w sieci lokalnej: Dodałeś reguły NAT do ustawień routera? |
|
kubawal Temat założony przez niniejszego użytkownika |
» 2012-08-06 08:07:36 1.Tak 2.Nie tylko 3.Nie muszę podawać adresu, to klienci muszą znać mój adres; 4.Nie mam routera. |
|
DejaVu |
» 2012-08-06 13:59:17 Odpal najpierw serwer i klienta na swoim komputerze - jak będzie działało to dopiero wznów dyskusję. Obecnie nie ma czego diagnozować. |
|
« 1 » |