Rock24 Temat założony przez niniejszego użytkownika |
[WinSock] Serwer widoczny poza siecią LAN » 2015-11-01 02:29:38 Witam. Problem polega na tym, że nie mogę przekierować portów na liveboxie 2.0 (mam internet z orange).Przekierowanie portów na pewno robię dobrze bo gdy udostępniam serwer telnet i przekierowuje na port 23 to wszystko działa. Gdy swój serwer przekierowywałem na routerze odpiętym od internetu (TP LINK) to wszystko działało poprawnie. Kod serwera: #include <iostream> #include <string> #include <winsock2.h> using namespace std; int main() { WSAData wsaData; WSAStartup( MAKEWORD( 2, 2 ), & wsaData ); sockaddr_in serwer; sockaddr_in klient; int gniazdo_serwera, gniazdo_klienta; gniazdo_serwera = socket( AF_INET, SOCK_STREAM, 0 ); serwer.sin_family = AF_INET; serwer.sin_port = htons( 3456 ); serwer.sin_addr.s_addr = inet_addr( "moje_ip_zewnetrzne" ); serwer.sin_zero[ 8 ]; bind( gniazdo_serwera,( struct sockaddr * ) & serwer, sizeof( serwer ) ); listen( gniazdo_serwera, 10 ); int klientlen = sizeof( sockaddr_in ); char recvbuf[ 256 ]; char dodaj[ 8 ] =( " (DUB)\0" ); gniazdo_klienta = accept( gniazdo_serwera,( struct sockaddr * ) & klient, & klientlen ); string tekst; while( true ) { memset( & recvbuf, 0, sizeof( recvbuf ) ); recv( gniazdo_klienta, recvbuf, 256, 0 ); tekst = recvbuf; if( tekst == "serwer.close" ) { return 0; } cout << recvbuf << "\n"; strcat( recvbuf, dodaj ); send( gniazdo_klienta, recvbuf, 256, 0 ); } closesocket( gniazdo_serwera ); closesocket( gniazdo_klienta ); WSACleanup(); return 0; }
|
|
DejaVu |
» 2015-11-01 09:18:22 http://cpp0x.pl/forum/temat/?id=18354http://cpp0x.pl/forum/temat/?id=19641Ja bym się upewnił na Twoim miejscu czy aby na pewno działa Ci poprawnie przekierowanie, ponieważ: - to, że uda Ci się tellnetować poprawnie wewnątrz sieci nic nie znaczy - to, że uda Ci się wykonać tellneta do zewnętrznego serwera również nic nie znaczy - aby przetestować poprawność połączenia, musisz spoza sieci spróbować dostać się po Twoim zewnętrznym IP na konkretny port. |
|
j23 |
» 2015-11-01 09:39:42 string tekst; ...
tekst = recvbuf; if( tekst == "serwer.close" ) { return 0; }
... strcat( recvbuf, dodaj ); send( gniazdo_klienta, recvbuf, 256, 0 ); |
Użyłeś std::stringa tylko po to, żeby porównać łańcuch?! Bezsens. Do porównywania c-stringów masz funkcję strcmp": if( strcmp( recvbuf, "serwer.close" ) == 0 ) return 0; |
|
Rock24 Temat założony przez niniejszego użytkownika |
Dzięki za odp. » 2015-11-01 10:54:38 Jeśli chodzi o serwer telnet to postawiłem go na własnym komputerze i telnetowałem się do niego z komórki. Czyli serwer miał taki adres jaki chce dać mojemu serwerowi |
|
DejaVu |
» 2015-11-01 11:51:02 Jeżeli komórka nie była połączona przez WIFI tylko przez LTE to fakt, połączenie prawdopodobnie poprawnie skonfigurowałeś dla tellneta. Analogicznie powinieneś wykonać przekierowanie dla każdego innego portu. |
|
fokusx |
» 2015-11-13 09:32:39 Pierwsze primo - IP serwera ustaw na wewnetrzne - LAN'owskie. Drugie primo - Klient musi laczyc sie spoza sieci - w tej samej sieci nie zadziala, wylacznie wewnetrzne. |
|
« 1 » |