首页 文章

收到udp消息丢失了

提问于
浏览
1

我可以发送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;
}

如果我没有设置超时,线程继续工作 .

响应消息是:

连接尝试失败,因为连接方在一段时间后没有正确响应,或者 Build 的连接失败,因为连接的主机无法响应

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 |                                       |
+-----+-----------+--------------+--------------+----------+--------+--------------------------------------------------------+

addendum: 192.168.1.61是一台托管网页的计算机,192.168.1.63是一款wifi dect手机

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

电话向192.168.1.61:5060发送一条SIP消息 . SIP流程如下:

[随机端口] - 消息 - > [5060] [5060] < - 200 OK - [5060]

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

NEWS: 当我停止pbx服务器's services, I can get the result (200 OK); otherwise, I' m无法接收任何SIP消息时...

2 回答

  • 0

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

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

  • 0

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

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

相关问题