如何制作简单的C#Windows窗体应用程序UDP套接字测试仪

如何制作简单的C#Windows窗体应用程序UDP套接字测试仪,c#,.net,sockets,udp,udpclient,C#,.net,Sockets,Udp,Udpclient,大家好,我对Visual Studio、C#编程和Windows窗体应用程序非常陌生 我的需求非常简单——我想创建自己的小程序,来监听GPS设备通过UDP发送的数据。我不需要沟通,只需要听和看屏幕上的数据 工作原理与此完全相同: (请参阅“UDP”选项卡) 我的GPS设备的IP为192.168.1.1,每1秒连续发送一个数字序列,通过UDP 25.255.255.255:5017进行传输 internet上的所有示例似乎都集中在双向通信、客户端和服务器聊天窗口等方面。有许多令人困惑的术语,如同步

大家好,我对Visual Studio、C#编程和Windows窗体应用程序非常陌生

我的需求非常简单——我想创建自己的小程序,来监听GPS设备通过UDP发送的数据。我不需要沟通,只需要听和看屏幕上的数据

工作原理与此完全相同:

(请参阅“UDP”选项卡)

我的GPS设备的IP为192.168.1.1,每1秒连续发送一个数字序列,通过UDP 25.255.255.255:5017进行传输

internet上的所有示例似乎都集中在双向通信、客户端和服务器聊天窗口等方面。有许多令人困惑的术语,如同步和a同步、客户端、服务器、UDP、TCP、绑定

我只想要一个比上面的例子更简单的程序,在这里我可以输入端口号5017,单击开始监听,然后立即工作

非常感谢收到所有建议和代码示例

非常感谢,,
Jon

我现在让它工作了,可以在UI的文本框中接收数据

我使用按钮\u开始\u单击打开端口并开始接收。但是,我无法让按钮停止工作。如何使用按钮单击停止/关闭/断开连接/结束接收

    public Form1()
    {
        InitializeComponent();
    }

    private void button_start_Click(object sender, EventArgs e)
    {
        Client = new UdpClient(Convert.ToInt32(textBox_port.Text));
        Client.BeginReceive(DataReceived, null);
    }

    private void DataReceived(IAsyncResult ar)
    {
        IPEndPoint ip = new IPEndPoint(IPAddress.Any, Convert.ToInt32(textBox_port.Text));
        byte[] data;
        try
        {
            data = Client.EndReceive(ar, ref ip);

            if (data.Length == 0)
                return; // No more to receive
            Client.BeginReceive(DataReceived, null);
        }
        catch (ObjectDisposedException)
        {
            return; // Connection closed
        }

        // Send the data to the UI thread
        this.BeginInvoke((Action<IPEndPoint, string>)DataReceivedUI, ip, Encoding.UTF8.GetString(data));
    }

    private void DataReceivedUI(IPEndPoint endPoint, string data)
    {
        txtLog.AppendText("[" + endPoint.ToString() + "] " + data + Environment.NewLine);
    }


    private void button_stop_Click(IAsyncResult ar) // NOT WORKING!! AGH!
    {
        IPEndPoint ip = new IPEndPoint(IPAddress.Any, Convert.ToInt32(textBox_port.Text));
        byte[] data;
        data = Client.EndReceive(ar, ref ip);
        Client.Close();

    }
public Form1()
{
初始化组件();
}
私有无效按钮\u开始\u单击(对象发送者,事件参数e)
{
Client=newudpclient(Convert.ToInt32(textBox\u port.Text));
Client.BeginReceive(DataReceived,null);
}
接收到私有无效数据(IAsyncResult ar)
{
IPEndPoint ip=新IPEndPoint(IPAddress.Any,Convert.ToInt32(textBox\u port.Text));
字节[]数据;
尝试
{
数据=Client.EndReceive(ar,参考ip);
如果(data.Length==0)
return;//不再接收
Client.BeginReceive(DataReceived,null);
}
捕获(ObjectDisposedException)
{
return;//连接已关闭
}
//将数据发送到UI线程
this.BeginInvoke((操作)DataReceivedUI,ip,Encoding.UTF8.GetString(数据));
}
私有void DataReceivedUI(IPEndPoint端点,字符串数据)
{
txtLog.AppendText(“[”+endPoint.ToString()+“]”+data+Environment.NewLine);
}
私有无效按钮\u停止\u单击(IAsyncResult ar)//不工作!!啊!
{
IPEndPoint ip=新IPEndPoint(IPAddress.Any,Convert.ToInt32(textBox\u port.Text));
字节[]数据;
数据=Client.EndReceive(ar,参考ip);
Client.Close();
}

在后台工作程序中运行相同的代码,然后您可以随时使用backgroundworker.cancelasync()取消后台工作程序。
希望这有帮助。

这可能对您有所帮助:请参阅msdn示例。这些示例使用socket,但您可以替换为继承socket tcpclient、tcplistener、udpclient、udplistener的任何类:堆栈溢出的格式与您只是不断发表文章的论坛不同。我认为您最好将此代码作为示例应用到您的问题中,然后删除答案。