C# 无法在WPF应用程序中接收UDP数据包
我需要一个简单的无连接ClientServer应用程序来与无线设备交换大量信息 在谈论问题之前,我将展示我到目前为止所做的: 环境:C#,WPF,.NetFramework 4.7.1,Visual Studio 2017 逻辑组织:UDP->UDPServer->UDPSpecServer;UDP->UDPClient 代码: 这基本上意味着我在指定的ip(本地主机)/端口(1984)接受来自每个人的数据包。在代码的某一点上,我有:C# 无法在WPF应用程序中接收UDP数据包,c#,.net,networking,C#,.net,Networking,我需要一个简单的无连接ClientServer应用程序来与无线设备交换大量信息 在谈论问题之前,我将展示我到目前为止所做的: 环境:C#,WPF,.NetFramework 4.7.1,Visual Studio 2017 逻辑组织:UDP->UDPServer->UDPSpecServer;UDP->UDPClient 代码: 这基本上意味着我在指定的ip(本地主机)/端口(1984)接受来自每个人的数据包。在代码的某一点上,我有: public void StartReceivingConn
public void StartReceivingConnectionless()
{
IAsyncResult result;
try
{
result = socket.BeginReceiveFrom(buffer, 0, MAX_UDP_PACKET_DIMENSION, SocketFlags.None, ref endPoint, new AsyncCallback(MessageReceived), buffer);
}
catch(Exception exception)
{
System.Diagnostics.Debug.Print(exception.Message);
}
}
这基本上意味着我的服务器对象开始等待传入数据,而MessageReceived方法:
public virtual void MessageReceived(IAsyncResult asynchronousResult)
{
int bytes = socket.EndReceiveFrom(asynchronousResult, ref endPoint);
StartReceivingConnectionless();
}
最后,对于服务器端:
public void StopReceivingConnectionless()
{
socket.Close();
}
在客户端时:
// Clientapp ctor
client = new FST.Lib.NetworkCommunication.UDPClient("localhost", "0");
// On-click somewhere
client.SendConnectionless(Encoding.ASCII.GetBytes("Hello world"), new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 1984));
1) 我仍然需要弄清楚为什么/如何,但有时这个应用程序能工作,有时不行:为什么
2) StopReceiveing方法被放置在主窗口的“Window_closing”事件中,不管发生什么,它都会生成一个已处理的对象异常,因为它会生成一条已接收的消息。我应该把它放在哪里?对于第1部分)-似乎我的虚拟机就是问题所在。我在家复制了同一个图书馆,一切都很顺利。在本例中,我使用UdpClient解决了相同架构的问题
第2部分)仍然是一个部分谜题:我错过了对socket.Shutdown()的调用;然后是socket.Close();如前所述,但此调用生成一条从导致崩溃的同一套接字接收的消息
我接受这个答案,但还是欢迎更详细的答案
// Clientapp ctor
client = new FST.Lib.NetworkCommunication.UDPClient("localhost", "0");
// On-click somewhere
client.SendConnectionless(Encoding.ASCII.GetBytes("Hello world"), new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 1984));