收到udp消息丢失

时间:2016-03-09 11:12:23

标签: c# sockets udp sip

我可以将udp消息发送到特定的URL和端口(成功),但是我无法收到我在Wireshark上看到的响应消息!

这是我用于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:1001@192.168.1.61 |  (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手机

我需要向wifi dect发送一条sip消息(我已经实现了)

手机将回信消息发送回192.168.1.61:5060。 SIP流程如下:

  

[随机端口] - 消息 - > [5060]

     

[5060]< - 200 OK - [5060]

所以,pc连接到dect作为udp客户端并发送消息,dect发回200 OK sip消息到pc的5060端口。我收到200 OK消息时遇到问题!

新闻:当我停止pbx服务器的服务时,我可以得到结果(200 OK);否则,我无法收到任何sip消息...

2 个答案:

答案 0 :(得分:0)

UDP协议不能像这样工作。这只是单向的。它不会验证收听方是否已准备好接收,也不会对成功传送数据做出任何回应。

如果您需要反馈,请尝试使用TCP。

答案 1 :(得分:0)

当您创建类似此new UdpClient(ipaddr, 5060)的UDP套接字时,将其绑定到任何可用的本地端口,并将其连接到具有IP ipaddr和端口5060的远程服务器。因此,当您通过此套接字发送内容时,它会到达服务器。

但是,此套接字不会看到来自服务器的SIP回复。服务器将SIP回复消息发送到5060(或5061用于加密SIP)。但是你没有听这个部分(事实上,没有人,所以内核只是放弃了这个数据报)。要正确接收这些消息,您还需要将本地udp套接字绑定到SIP端口。