Loopback / Localhost Вопрос - PullRequest
       39

Loopback / Localhost Вопрос

2 голосов
/ 22 сентября 2011

У меня вопрос по поводу сокетов / клиентов ....

Я только что закончил писать клиент-серверную программу на C #. Мне было интересно, как вы подключаетесь к компьютерам, которые имеют другой IP-адрес. Например, если я хочу запустить клиент и сервер по отдельности на двух разных машинах, возврат по шлейфу (или использование localhost) этого не допустит ....

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

TcpClient client = new TcpClient();

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);

Ответы [ 3 ]

5 голосов
/ 22 сентября 2011

Вам просто нужно знать IP-адрес сервера и указать его в коде на стороне клиента.

Вы можете получить свой IP-адрес, набрав ipconfig /all в командной строке.Обратите внимание, что это даст вам только подключение к локальной сети.

Если вы пытаетесь сделать это через Интернет, вам нужно будет использовать службу, которая находит вашу глобальную сеть (WAN).Айпи адрес.Вы можете узнать, как это сделать, в Google, поскольку для этого нет «стандартной» службы.

Если у вас есть маршрутизатор, вам нужно будет перенаправить порт на машину, на которой работает ваша служба.Найдите Преобразование сетевых адресов и ознакомьтесь с документацией по вашему маршрутизатору или позвоните в службу технической поддержки.Или в Google "как переадресовать порты?"На стороне сервера просто настройте TcpListener с помощью IpAddress.Any.Укажите любой номер порта, который вам нравится, который еще не используется (8888).

На стороне клиента подключитесь к IP-адресу сервера.Замените IPAddress.Parse("127.0.0.1") и 8888 на порт и адрес сервера.
2 голосов
/ 22 сентября 2011

127.0.0.1 - это внутренний адрес «этого компьютера» или устройства, на котором запущено приложение. В современной сети каждый компьютер будет иметь 127.0.0.1 и как минимум 1 другой IP-адрес.

Чтобы узнать IP-адрес другого компьютера Windows, вы можете использовать ipconfig из командной строки. Вы получите что-то вроде этого:

Конфигурация Windows IP

Ethernet adapter Local Area Connection:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 10.0.0.2
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 10.0.0.1

В этом случае 10.0.0. 2 - это IP-адрес, который вы можете использовать для подключения к нему с других компьютеров. Вот так:

TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("10.0.0.2"), 8888);  
client.Connect(serverEndPoint);

Компьютер Windows также будет иметь имя, такое как JimsPC или JimsPC.abc.com, которое также может использоваться в конструкторе TcpClient или BeginConnect, Connect в таких методах.

TcpClient client = new TcpClient("JimsPC", 8888);

или

TcpClient client = new TcpClient();
client.Connect("JimsPC", 8888);
2 голосов
/ 22 сентября 2011

Решение OverMars не очень хорошо, потому что сторонние сайты, такие как ipchicken, дадут вам ваш WAN IP.Локальные соединения не будут работать.Посмотрите NAT (преобразование сетевых адресов), если вам нужна дополнительная информация.

Просто свяжитесь с «любым» адресом, если вы хотите подключить отдельную машину.

TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 8888);

Обратите внимание, что «Любой»"переводит на адрес" 0.0.0.0 ".

...