2016-03-09 3 views
1

Я могу отправить сообщение udp на определенный URL и порт (успешно), но я не могу получить ответное сообщение, которое я могу видеть на Wireshark!получение сообщения udp отсутствует

Это код, который я использую для подключения UdP:

Byte[] sendBytes = Encoding.ASCII.GetBytes(sipMessage); 
String responseData = String.Empty; 
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); 

try 
{ 
    using (UdpClient udpClient = new UdpClient(ipaddr, 5060)) 
    { 
     udpClient.Client.ReceiveTimeout = 1000; 
     udpClient.Send(sendBytes, sendBytes.Length); 
     Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); 
     responseData = Encoding.ASCII.GetString(receiveBytes); 
    } 
} 
catch (Exception ex) 
{ 
    responseData = ex.Message; 
} 

Если я не установлен тайм-аут, поток продолжает работать.

Сообщение ответ:

Попытка подключения не удалась, поскольку подключенная сторона не должным образом реагировать после определенного периода времени, или установленное соединение не удалось, поскольку подключенный хозяин не смог ответить

результат от Wireshark ниже:

+-----+-----------+--------------+--------------+----------+--------+--------------------------------------------------------+ 
| No. | Time | Source | Destination | Protocol | Length |       Info       | 
+-----+-----------+--------------+--------------+----------+--------+--------------------------------------------------------+ 
| 465 | 33.378167 | 192.168.1.61 | 192.168.1.63 | SIP  | 289 | Request: MESSAGE sip:[email protected] | (text/plain) | 
| 469 | 33.817460 | 192.168.1.63 | 192.168.1.61 | SIP  | 254 | Status: 200 OK |          | 
+-----+-----------+--------------+--------------+----------+--------+--------------------------------------------------------+ 

добавление: 192.168.1.61 представляет собой компьютер, на котором размещен веб-страницы, 192.168.1.63 является WiFi Телефон DECT

Мне нужно отправить сообщение глотнуть к Wi-Fi стандарта DECT (который я уже достигнуто)

телефон отправляет обратно сообщение sip на 192.168.1.61:5060. Поток SIP, как:

[Random Port] - Сообщение -> [5060]

[5060] < - 200 OK - [5060]

так, шт подключитесь к dect как udp-клиенту и отправьте сообщение, dect отправит обратно 200 OK sip-сообщение на порт 5060 ПК. У меня проблема при получении сообщения 200 OK!

НОВОСТИ: Когда я останавливаю услуги сервера pbx, я могу получить результат (200 OK); в противном случае я не могу получить сообщение sip ...

ответ

0

Протокол UDP не работает так. Это односторонний подход. Он не проверяет, что слушающая сторона готова к получению, а не дает ответа о успешной доставке данных.

Если вам нужна обратная связь, попробуйте использовать TCP.

+0

Что такое "udpClient.Receive"? –

+0

Для получения данных от отправителя. если у вас есть сервер и клиент под контролем, вы можете/должны сами написать ответ. – Johan

+0

Как вы можете видеть на журналах wirehark, есть ответное сообщение от udp. –

0

При создании своего UDP-сокета, такого как new UdpClient(ipaddr, 5060), вы привязываете его к любому доступному локальному порту и подключаете его к удаленному серверу с IP-адресом ipaddr и портом 5060. Поэтому, когда вы отправляете что-то через этот сокет, он достигает сервера.

Однако этот сокет не будет видеть ответы SIP с сервера. Сервер отправит ответное сообщение SIP на 5060 (или 5061 для зашифрованного SIP). Но вы не слушаете эту часть (на самом деле, никто, поэтому ядро ​​просто бросает эту дейтаграмму). Чтобы правильно получать эти сообщения, вам необходимо связать локальный udp-сокет с SIP-портом.

+0

Как я могу привязать udpClient к sip-порту? Я пробовал это 'udpClient.Client.Bind (RemoteIpEndPoint);' , но это даст мне ошибку 'Неверный аргумент был предоставлен' –

+0

Вы не можете привязываться к удаленному ip. Вам нужно привязать к локальному ip. – SergeyA

+0

Теперь я получаю «Только одно использование каждого адреса сокета (протокол/сетевой адрес/порт), как правило, разрешено» Не можете ли вы отправить пример кода или ссылку? –

Смежные вопросы