我可以将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消息...
答案 0 :(得分:0)
UDP协议不能像这样工作。这只是单向的。它不会验证收听方是否已准备好接收,也不会对成功传送数据做出任何回应。
如果您需要反馈,请尝试使用TCP。
答案 1 :(得分:0)
当您创建类似此new UdpClient(ipaddr, 5060)
的UDP套接字时,将其绑定到任何可用的本地端口,并将其连接到具有IP ipaddr
和端口5060
的远程服务器。因此,当您通过此套接字发送内容时,它会到达服务器。
但是,此套接字不会看到来自服务器的SIP回复。服务器将SIP回复消息发送到5060(或5061用于加密SIP)。但是你没有听这个部分(事实上,没有人,所以内核只是放弃了这个数据报)。要正确接收这些消息,您还需要将本地udp套接字绑定到SIP端口。