c# - 如何使用线程池来处理新线程中的每个连接

标签 c# multithreading sockets client-server

我有一个简单的服务器,它等待客户端连接、读取传入流并发回消息。我想做的是让每个连接都由单独的线程处理。这是我第一次在 C# 中使用套接字和线程,我发现的大多数示例都非常令人困惑,因此任何帮助或简单的示例将不胜感激。

这是我现在拥有的。

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;

    [STAThread]
    static void Main(string[] args)
    {
        TestServer ts = new TestServer();
         ts.Start();
    }

class TestServer
{
    private readonly int port = 48888;
    private readonly IPAddress ip = IPAddress.Parse("127.0.0.1");

    private TcpListener listener;

    public TestServer()
    {
       this.listener = new TcpListener(this.ip, this.port);
    }

    public void Start()
    {
        this.listener.Start();
        Console.WriteLine("Server Running...");

        Socket s;
        Byte[] incomingBuffer;
        int bytesRead;
        Byte[] Message;

        while (true)
        {
            s = this.listener.AcceptSocket();

            incomingBuffer = new Byte[100];
            bytesRead = s.Receive(incomingBuffer);
            string message = "Hello from the server";
            Message = Encoding.ASCII.GetBytes(message.ToCharArray());

            s.Send(Message);
        }
    }
}

最佳答案

试试这个:

public void Start()
{
    this.listener.Start();
    Console.WriteLine("Server running...");

    while (true)
    {
        Socket s = this.listener.AcceptSocket();
        ThreadPool.QueueUserWorkItem(this.WorkMethod, s);
    }
}

private void WorkMethod(object state)
{
    using (Socket s = (Socket)state)
    {
        byte[] buffer = new byte[100];
        int count = s.Receive(buffer);
        string message = "Hello from the server";
        byte[] response = Encoding.ASCII.GetBytes(message);
        s.Send(response);
    }
}

关于c# - 如何使用线程池来处理新线程中的每个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724596/

相关文章:

c# - 将 WPF 控件放入 Windows 窗体窗体?

C#:当我尝试移动窗口、单击外部或最小化窗口时,窗口会挂起

c++ - 使用 winsock 设置主机名?

django - NginX权限被拒绝13

c# - 如何为二叉搜索树编写 GetEnumerator()?

javascript - 如何使用 Ajax 将参数传递给模态表单

c# - asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

python - 如果您的代码隐藏运行无限循环,您如何获得响应式 GUI? PyQT

multithreading - 如何使用 Entity Framework 在 SQLite 中设置线程模式?

python - 为什么我看到 Python BaseHTTPServer 出现随机读取错误?