WinSock serwer - klient

0

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?

0

Jeśli masz adres publiczny, to może, jesli nie, to na urządzeniu które ma adres publiczny musisz zrobić przekierowanie na serwer. Ponieważ piszesz, że masz wewnetrznie 192.168.1.x, to musisz zrobić przekierowanie na routerze (jesli to Twój router).

1 użytkowników online, w tym zalogowanych: 0, gości: 1