Я прошу прощения, если это было задано и ответил в другом месте. Я искал и прочитал все близкие темы, и не нашел хита ...
Вот моя ситуация. У моего клиента есть программное обеспечение, которое отправляет и получает пакеты UDP. Программное обеспечение конечного пользователя работает на ноутбуке, подключенном через воздушную карту Verizon. (Я объясню, почему это важно позже ...) Они хотят, чтобы я запрашивал отчет с сервера через заданный интервал времени, поэтому им не нужно забывать запрашивать его с сервера. Чтобы сделать это, я должен заставить сервер думать, что я его клиентское программное обеспечение, и выполнить мою просьбу. Это не так плохо, как кажется.
Моя программа отправляет свой запрос на сервер через пакет UDP. Сервер считает, что запрос поступил от собственного клиентского программного обеспечения, и отправляет результат обратно клиенту. Их мобильный клиент обрабатывает информацию, и моя программа бездействует до следующего интервала. Все счастливы. Я получил эту работу, поместив wireshark в систему и наблюдая за пакетами, идущими туда-сюда, а затем разбирая UDP-пакеты.
Согласно wireshark, клиент отправляет свой пакет через порт 6767, а сервер получает его через порт 6868. Я смог заставить это работать, когда был подключен к их сети напрямую (в качестве теста). Однако, когда я перенес свое программное обеспечение в мобильное устройство, работающее на платформе verizon, оно не работает. Насколько я могу судить, пакеты все еще идут вверх, но они не распознаются сервером. И проблема в том, что Wireshark не будет захватывать пакеты с карты Verizon, поэтому я не могу сравнивать байты - как я делал в сети. Мой клиент, который, кажется, немного одурманен при обсуждении сетевых вещей, говорит мне, что порты остаются неизменными, независимо от того, находятся ли они в сети или на карте.
Простой код, который я запускаю, выглядит следующим образом:
public void transmitUDPDataPacket(string IP, string portStr)
{
Int32 port = 0;
try
{
port = Convert.ToInt32(portStr);
}
catch (Exception ex)
{
resultFailed("FAILED: transmitDataPacket " + ex.Message);
return;
}
Socket sending_socket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPAddress send_to_address = IPAddress.Parse(IP);
IPEndPoint sending_end_point = new IPEndPoint(send_to_address, port);
try
{
sending_socket.SendTo(data, data.Length, SocketFlags.None, sending_end_point);
}
etc.
Итак, несколько вопросов:
- Я знаю, как указать конечную точку (то есть 6868) в моей команде UDP. Но я не
посмотрите, где я указываю, через какой порт он выходит с моего конца (т.е. 6767). Есть
такая вещь?
- Если не покупать специальное программное обеспечение, есть ли оно в любом случае?
захватить пакеты Verizon Aircard?
- Какой тип перечисления SocketType мне следует использовать? В настоящее время я
Я использую Dgram, но я думал о переходе на RDM - хотя я не
думаю, что здесь что-то изменится, так или иначе, это была мысль.