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