Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在WPF应用程序中接收UDP数据包_C#_.net_Networking - Fatal编程技术网

C# 无法在WPF应用程序中接收UDP数据包

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

我需要一个简单的无连接ClientServer应用程序来与无线设备交换大量信息

在谈论问题之前,我将展示我到目前为止所做的:

环境:C#,WPF,.NetFramework 4.7.1,Visual Studio 2017

逻辑组织:UDP->UDPServer->UDPSpecServer;UDP->UDPClient

代码:

这基本上意味着我在指定的ip(本地主机)/端口(1984)接受来自每个人的数据包。在代码的某一点上,我有:

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));