在 C# 中实现套接字侦听器的最佳方法

2024-03-21

我已经搜索过答案,但找不到类似的东西......

我对 C# 相当陌生。我需要使用 WinForms 在 C# 中创建一个程序。它基本上有 2 个组件:UI,然后我需要一个永久侦听套接字 TCP 端口的进程。如果收到任何内容,那么我需要引发一个事件或类似的事件,以便我可以更新 UI。

问题:实现程序运行时需要一直监听的进程的最佳方式是什么?

然后,当我收到消息时,如何通知 UI 它需要更新?

Thanks!


您可以使用TcpListener等待另一个线程上的传入连接。每次收到新连接时,创建一个新线程来处理它。使用Control.Invoke从非 UI 线程更新 UI。这是一个简短的例子:

public MainForm()
{
    InitializeComponents();
    StartListener();
}

private TcpListener _listener;
private Thread _listenerThread;

private void StartListener()
{
    _listenerThread = new Thread(RunListener);
    _listenerThread.Start();
}

private void RunListener()
{
    _listener = new TcpListener(IPAddress.Any, 8080);
    _listener.Start();
    while(true)
    {
        TcpClient client = _listener.AcceptTcpClient();
        this.Invoke(
            new Action(
                () =>
                {
                    textBoxLog.Text += string.Format("\nNew connection from {0}", client.Client.RemoteEndPoint);
                }
            ));;
        ThreadPool.QueueUserWorkItem(ProcessClient, client);
    }
}

private void ProcessClient(object state)
{
    TcpClient client = state as TcpClient;
    // Do something with client
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中实现套接字侦听器的最佳方法 的相关文章

随机推荐