Клиент не подключается к серверу через интернет - PullRequest
0 голосов
/ 29 августа 2011

Я настроил простую систему клиент / сервер, но по какой-то причине клиент не подключается через Интернет. Я установил связь между ними на одном компьютере, используя адрес localhost (127.0.0.1) и IP-адрес моей локальной сети (192.168.2.2).

Я также подтвердил, что порт открыт с помощью http://www.whatsmyip.org/ports/,, и когда я использую этот сайт, на сервере запускается функция обратного вызова, поэтому я предполагаю, что сервер работает нормально.

Однако, когда я пытаюсь подключиться к тому же (интернет) IP-адресу / порту от моего клиента, сервер ничего не обнаруживает, и клиент выдает исключение при обратном вызове OnConnect. Я заметил, что свойство RemoteEndPoint clientSocket не устанавливается корректно инструкцией BeginConnect - оно выдает исключение SocketException (10057), когда я на него смотрю. (При подключении через адрес локальной сети работает нормально.)

private void ConnectToServer()
{
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPAddress ipAddress = IPAddress.Parse(txtIPAddress.Text);

    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Convert.ToInt32(txtPort.Text));
    clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
}

Что может помешать клиенту подключаться к серверу через внешний IP-адрес, учитывая, что он может подключаться через IP-адрес локальной сети и что сервер принимает подключения через Интернет?

Я использую Windows 7 и .NET 3.0.

Любой совет с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 29 августа 2011

Во-первых, вы не должны ожидать, что сокет будет подключен сразу после того, как вы позвонили BeginConnect.Обычно для установления соединения требуется несколько циклов.Поэтому при запросе об удаленной конечной точке до установления соединения ожидается код ошибки 10057 Not Connected.

Почему не работает настройка сети.Если я правильно понимаю вашу настройку, вы пытаетесь отправить пакеты следующим образом:

Your machine (LAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

Вы убедились, что устройство переадресации портов поддерживает эту настройку?

Вы заявляете, что проверили следующее:

Remote machine (WAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

В вашем устройстве переадресации портов может отсутствовать поддержка LAN -> WAN -> LAN переадресации портов.

Возможно, вы также захотите использовать Wireshark чтобы посмотреть, какие пакеты отправлены.

...