我正在尝试编写一个可以与Node.js服务器通信的图形化C#程序。
我正在使用UdpClient类,我可以向服务器发送一些消息。
但是,我不知道如何从服务器接收UDP包。 JavaScript和Windows窗体小部件是事件驱动的,但C#中的UdpClient类没有任何与数据接收相关的方便事件。
另外,我不知道在哪里放置包裹接收代码。大多数在线示例都是控制台程序,我的程序是基于GUI的。
我希望我的程序能够在端口上连续监听,当程序包进入时,程序可以捕获程序包并在TextBox中显示其内容。
有什么建议吗?
答案 0 :(得分:1)
您可以使用BeginReceive
异步侦听端口。它也适用于GUI应用程序 - 只需记住在与UI交互之前将数据发送到UI线程。
此示例来自WinForms应用程序。我在名为txtLog
的表单上放了一个多行文本框。
private const int MyPort = 1337;
private UdpClient Client;
public Form1() {
InitializeComponent();
// Create the UdpClient and start listening.
Client = new UdpClient(MyPort);
Client.BeginReceive(DataReceived, null);
}
private void DataReceived(IAsyncResult ar) {
IPEndPoint ip = new IPEndPoint(IPAddress.Any, MyPort);
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);
}