C# 缺少接收udp消息

C# 缺少接收udp消息,c#,sockets,udp,sip,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

我可以将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消息(我已经实现)

手机将sip消息发送回192.168.1.61:5060。SIP流类似于:

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


[5060]UDP协议不是这样工作的。这是单向的。它不会验证侦听方是否准备好接收数据,也不会对数据的成功传递做出任何回应


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

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


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

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


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

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


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

什么是“udpClient.receive”?用于从发送方接收数据。如果服务器和客户端都处于控制之下,您可以/必须自己编写响应。正如您在wireshark日志中看到的,有一条来自udp的响应消息。我建议您设置第二个客户端,这样您就有一个用于发送,一个用于侦听。已尝试,结果相同
UdpClient udpSender=new UdpClient();UdpClient udpreciver=新的UdpClient();udpreciver.Client.ReceiveTimeout=1000;udpSender.Connect(ipaddr,5060);udpreciver.Client.Bind(RemoteIpEndPoint);发送(sendBytes,sendBytes.Length);字节[]receiveBytes=udpreciver.Receive(参考RemoteIpEndPoint);responseData=Encoding.ASCII.GetString(receiveBytes);udpSender.Close();udpreciver.Close()什么是“udpClient.Receive”?用于从发送方接收数据。如果服务器和客户端都处于控制之下,您可以/必须自己编写响应。正如您在wireshark日志中看到的,有一条来自udp的响应消息。我建议您设置第二个客户端,这样您就有一个用于发送,一个用于侦听。已尝试,结果相同
UdpClient udpSender=new UdpClient();UdpClient udpreciver=新的UdpClient();udpreciver.Client.ReceiveTimeout=1000;udpSender.Connect(ipaddr,5060);udpreciver.Client.Bind(RemoteIpEndPoint);发送(sendBytes,sendBytes.Length);字节[]receiveBytes=udpreciver.Receive(参考RemoteIpEndPoint);responseData=Encoding.ASCII.GetString(receiveBytes);udpSender.Close();udpreciver.Close()如何将udpClient绑定到sip端口?我尝试了这个
udpClient.Client.Bind(RemoteIpEndPoint)但这给了我一个错误
提供的参数无效
您无法绑定到远程ip。您需要绑定到本地ip。现在我得到
每个套接字地址(协议/网络地址/端口)通常只允许使用一次
您可以发送一个示例代码或链接吗?这意味着您正在尝试将其中两个绑定到同一地址。您需要认真阅读书籍并研究UdpClient的用法。如何将UdpClient绑定到sip端口?我尝试了这个
udpClient.Client.Bind(RemoteIpEndPoint)但这给了我一个错误
提供的参数无效
您无法绑定到远程ip。您需要绑定到本地ip。现在我得到
每个套接字地址(协议/网络地址/端口)通常只允许使用一次
您可以发送一个示例代码或链接吗?这意味着您正在尝试将其中两个绑定到同一地址。您需要真正接触书籍并研究UdpClient的用法。