0

我已使用此代码示例http://msdn.microsoft.com/en-us/library/tst0kwb1.aspx来制作能够接收和发送消息的控制台 UDP 服务器。

但我不希望这是一个控制台应用程序,我想使用 Forms。我已经在我的应用程序中成功实现了发送消息功能,但我不知道如何让监听器工作。

这是接收消息的代码,它不做任何事情。
注意:我将此代码放在按钮单击事件代码的正下方。

private void StartListener()
    {
        bool done = false;
        UdpClient listener = new UdpClient(listenPort);
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);

        try
        {
            while (!done)
            {
                this.lblMessage.Text = "Waiting for broadcast";
                byte[] bytes = listener.Receive(ref groupEP);

                this.lblRecieve.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
            }

        }
        catch (Exception e)
        {
            this.lblMessage.Text = e.ToString();
        }
        finally
        {
            listener.Close();
        }
    }

这段代码显然是错误的,但我以前从未在 C# 中做过任何事情,而这个控制台示例代码是我能找到的关于 UDP 服务器的唯一指南。

这是发送消息的代码,它工作得很好。

private void btnSend_Click(object sender, EventArgs e)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        IPAddress broadcast = IPAddress.Parse("192.168.0.105");
        byte[] sendbuf = Encoding.ASCII.GetBytes("test");
        IPEndPoint ep = new IPEndPoint(broadcast, listenPort);
        s.SendTo(sendbuf, ep);
        this.lblMessage.Text = "Sent Message";
    }

编辑:

我感谢您的帮助,但我没有调整我自己损坏的代码以使其正常工作,而是找到了另一个代码进行调整,以便它像我想要的那样工作。

C# 中服务器客户端应用程序的 UDP 数据报代码

这是我借来的代码,它工作得很好,除了 stop() 不能正常工作,但这不是一个主要问题,应该不难用谷歌修复。

我仍然从你们给我的链接中学到了很多东西。

4

2 回答 2

3

它可能有效,你只是看不到它。你用无限循环挂断 UI 线程,表单完全死了。也不会绘画,因此您看不到标签更新。

您需要开始使用 UdpClient.BeginReceive() 或创建一个线程来运行此代码。如果您使用线程,则需要使用 Control.BeginInvoke() 来更新标签。

于 2012-04-17T05:29:12.983 回答
0

您必须注册一个侦听器。只需检查以下文章。

活动教程

于 2012-04-17T05:28:56.883 回答