Mam taki kod serwera:
#include "yourname.h"
using namespace std;
void main()
{
long answer;
WSAData wsaData;
WORD DLLVERSION;
DLLVERSION = MAKEWORD(2,1);
answer = WSAStartup(DLLVERSION, &wsaData);
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
SOCKET $Listen;
SOCKET $Connect;
$Connect = socket(AF_INET, SOCK_STREAM, NULL);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
$Listen = socket(AF_INET, SOCK_STREAM, NULL);
bind($Listen, (SOCKADDR*)&addr, sizeof(addr));
listen($Listen, SOMAXCONN);
for(;;)
{
cout<<"Oczekiwanie na polaczenie przychodzace..."<<endl;
if($Connect != accept($Listen, (SOCKADDR*)&addr, &addrlen));
cout<<"Znaleziono polaczenie"<<endl;
}
}
po uruchomieniu serwer oczekuje na połączenie, włączam telneta: open 127.0.0.1 1234, obiekt cout wyświetla na ekran znaleziono połączenie, i wszystko ok. Ale co by było gdybym chciał uruchomić ten serwer na komputerze z poza sieci lokalnej i połączyć się z nim? Przypuśćmy że jeśli canyouseeme.org pokazuje moje (publiczne?) IP: 83.7.172.xxx, a wewnętrzne 192.168.1.x po zmianie:
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
na
addr.sin_addr.s_addr = inet_addr("83.7.172.xxx");
okazuje się, że uruchomienie serwera skutkuje wykonywanie obu instrukcji w pętli nieskończonej, cykl się powtarza, powtarza i powtarza.
Jest możliwe takie bezpośrednie połączenie z komputerem poza LAN, czy wymaga ono serwera pośredniczącego?