小编Luc*_*mes的帖子

C# 异步套接字 - 线程逻辑

Socket.BeginSend、Socket.BeginReceive、Socket.BeginAccept 等背后的线程创建逻辑如何工作?

是否会为连接到我的服务器的每个客户端创建一个新线程来处理代码,或者是否只会为每个功能(接受、接收、发送...)创建一个线程,无论有多少客户端连接到服务器?这样,只有在客户端 1 接受代码完成后才执行客户端 2 接受代码,依此类推。

这是我编写的代码,我试图更好地理解其背后的逻辑:

public class SocketServer
{
    Socket _serverSocket;
    List<Socket> _clientSocket = new List<Socket>();
    byte[] _globalBuffer = new byte[1024];

    public SocketServer()
    {
        _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    }

    public void Bind(int Port)
    {
        Console.WriteLine("Setting up server...");
        _serverSocket.Bind(new IPEndPoint(IPAddress.Loopback, Port));
    }

    public void Listen(int BackLog)
    {
        _serverSocket.Listen(BackLog);
    }

    public void Accept()
    {
        _serverSocket.BeginAccept(AcceptCallback, null);
    }

    private void AcceptCallback(IAsyncResult AR)
    {
        Socket socket = _serverSocket.EndAccept(AR);
        _clientSocket.Add(socket);
        Console.WriteLine("Client Connected");
        socket.BeginReceive(_globalBuffer, 0, _globalBuffer.Length, SocketFlags.None, ReceiveCallback, socket);
        Accept();
    } …
Run Code Online (Sandbox Code Playgroud)

c# sockets multithreading asynchronous

5
推荐指数
1
解决办法
3296
查看次数

标签 统计

asynchronous ×1

c# ×1

multithreading ×1

sockets ×1