Подскажите пожалуйста, есть ли возмлжность передать данные на клиент, который находится под NAT.
Поясню задачу, есть сервер с внешним IP. Есть клиент под NAT, но с включённым UPNP. Но БЕЗ настроек проброса портов. Это не широковещание. Это только 1 клиент и только 1 сервер. Задача, передать на клиент данные (и делать это постояно , тоесть в While(true) {передача}) по UDP.
Подскажите пожалуйста, куда двигаться.
UPDATE////////////////////
По совету товарищей ниже сделал так: Клиент (за натом) отправляет каждые 5 секунд текст "ПоддержкаСоединения" на сервер (статичный внешний IP за роутером с пробросом портов). Сервер в ответ на это сообщение высылает свои данные. Серверный код:
private void ListenConnectionSupport(ref string itValue, CancellationToken cancelToken)
{
IPEndPoint IpEp = new IPEndPoint(IPAddress.Any, 13001);
UdpClient listenClient = new UdpClient(IpEp);
try
{
while (true)
{
cancelToken.ThrowIfCancellationRequested();
IPEndPoint cIpEp=null;
byte[] messageBytes = listenClient.Receive(ref cIpEp);
if (Encoding.UTF8.GetString(messageBytes) == "UDP-support")
{
itValue = String.Format("{0}:{1}",cIpEp.Address,cIpEp.Port);
}
}
}
catch (OperationCanceledException ex)
{ }
finally
{
if (listenClient != null)
listenClient.Close();
}
}
private void SendData(ref Bitmap kadr, ref string kuda, CancellationToken cancelToken)
{
UdpClient senderClient = new UdpClient();// (ClientEP);
try
{
while (true)
{
cancelToken.ThrowIfCancellationRequested();
if (string.IsNullOrEmpty(kuda))
continue;
byte[] testMessage = Encoding.UTF8.GetBytes(kadr.ToString());
string ip = kuda.Split(':')[0];
string p = kuda.Split(':')[1];
IPEndPoint clientEP = new IPEndPoint(IPAddress.Parse(ip), int.Parse(p));
senderClient.Send(testMessage, testMessage.Length, clientEP);
Thread.Sleep(3000);
}
}
catch (OperationCanceledException ex)
{ }
finally
{
if (senderClient != null)
senderClient.Close();
}
}
Если клиент находится в той же локалке (за тем же роутером), что и сервер, всё ок. А если клиент через интернет (другой компьютер через мобильный роутер), то серверные сообщения не доходят.
Подскажите!
Насколько мне известно, роутер помнит некоторое время "как пробросил" пакеты, т.е. хранит в таблице соответствия адрес внутреннего IP и порт, который был использован для него. Если эта пара более не используется, то через несколько минут она удаляется из этой таблицы.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сидел пробовал написать Generic метод для получения значения типа из указателя, и вот случайно написал where T : unmanaged и этот код был успешно откомпилирован!
Есть проект XamarinForms, внутри есть три приложения (iOS, Android, UWP), один общий проект с общим кодом Portable Class Library
Имеется два классаВ классе Two создаем экземпляр класса One в переменную $one