Передача данных по TCP через интернет
Подскажите пожалуйста, как реализовать передачу данных между двумя программами, установленными на разных ПЭВМ по протоколу TCP через интернет. (то есть айпишники публичные, не локальные). Как поднять локальный TCP сервер я знаю, но когда речь идет о сетевом взаимодействии, увы... Что делаю не так или может я о чем-то не догадываюсь, помогите.
СЕРВЕР:
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, 8888);
using Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
socket.Bind(ipPoint);
socket.Listen(100);
КЛИЕНТ:
using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//тут указал условный публичный айпишник сервера
await socket.ConnectAsync("94.103.226.200", 8888);
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, 9999);
MessageBox.Show($"Подключение к {socket.RemoteEndPoint} установлено");
}
catch (SocketException)
{
MessageBox.Show($"Не удалось установить подключение");
}
Ответы (1 шт):
Код данного ПО вполне рабочий, действительно, но вот достучаться до сервера, который развернут на ПК, который в свою очередь имеет выход в инет только через роутер, не вариант без дополнительных танцев. Существует такая штука как NAT, которая отвечает за переадресацию трафика. Публичный айпишник - это айпишник не ПК, а роутера, а роутер уже внутри сети раздает всем свои айпишники по типу 192.168.0.1 и т.д. Так вот что бы все было ок - нужно зайти в настройки роутера -> настройки NAT -> добавить порт (в моем случае был 13400) и настроить переадрисацию на ПК с сервером. Вуаля!