Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinSock] Serwer widoczny poza siecią LAN

Ostatnio zmodyfikowano 2015-11-13 09:32
Autor Wiadomość
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:
C/C++
#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;
}
P-139457
DejaVu
» 2015-11-01 09:18:22
Frazy, które należy wpisać w wyszukiwarkę google:
http://cpp0x.pl/forum/temat/​?id=18354
http://cpp0x.pl/forum/temat/​?id=19641

Ja 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.
P-139458
j23
» 2015-11-01 09:39:42
C/C++
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;
P-139460
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
P-139464
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.
P-139473
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.
P-140066
« 1 »
  Strona 1 z 1