У меня есть общий вопрос, на который, вероятно, где-то здесь ответили, но использование поиска было не очень продуктивным. Итак, я повторюсь, и если есть что-то об этом, пожалуйста, укажите мне там. Спасибо.
Итак, общая идея такова:
У нас есть два .NET-написанных клиента, которые хотят общаться друг с другом без маршрутизации всего трафика через сервер. Более того, не обязательно, чтобы оба клиента были основаны на .NET, но один будет в любом случае (другим может быть Objective-C, C ++ в Unix и т. Д.).
Идея такова:
- Первый клиент устанавливает соединение с некоторым сервером, поэтому NAT запоминает, что клиент находится по адресу 10.0.0.1:1234, а сервер находится по адресу 70.0.0.7:4567. Итак, когда 70.0.0.7 отправит пакет обратно в NAT, NAT будет знать, как маскировать его клиенту.
- Второй клиент устанавливает соединение с тем же сервером, поэтому второй NAT также запоминает, что внутренний клиент по адресу 192.168.0.1:19234 подключен к серверу по адресу 70.0.0.7:7654 и также сможет принимать пакеты обратно для 192.168.0.1:19234
- Теперь нам нужно установить соединение с 10.0.0.1:1234 на 192.168.0.1:19234.
Оба клиента c # могут знать о конечных точках друг друга (скажем, сервер сохраняет NAT-адреса, и они являются: Client1 - 111.0.0.1:1111 и Client2 - 222.0.0.2:2222).
Для этого необходимо, чтобы Client1 мог отправлять пакеты напрямую на 222.0.0.2:2222 без вызова кулака Socket.Connect, а для Client2 отправлять пакеты на 111.0.0.1:1111 без вызова также Socket.Connect.
Возможно ли это сделать только в .NET без использования каких-либо специальных библиотек, только с использованием стандартных сокетов и т. Д.?