当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C#中实现套接字侦听器的最佳方法》经验,为你挑选了1个好方法。

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

我对C#很新.我需要使用WinForms在C#中创建一个程序.它基本上有两个组件:UI然后我需要有一个永久侦听套接字TCP端口的进程.如果收到了任何内容,那么我需要提出一个类似的事件,以便我可以更新UI.

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

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

谢谢!



1> Thomas Leves..:

您可以使用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
    // ...
}

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有