gpt4 book ai didi

C#异步服务器套接字定义?

转载 作者:行者123 更新时间:2023-12-03 12:06:30 25 4
gpt4 key购买 nike

有人可以解释 c# 中的异步套接字吗?我刚刚遵循了 MSDN 中的示例,这是我的代码的一部分:

public void Start()
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 10000);
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 10000);
serverSocket.Listen(1000);
while (!stop)
{
Console.WriteLine("Server Thread #" + Thread.CurrentThread.ManagedThreadId);
allDone.Reset();
serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
allDone.WaitOne();
}
}
private void AcceptCallback(IAsyncResult ar)
{
allDone.Set();

Socket serverSocket = (Socket)ar.AsyncState;
Socket clientSocket = serverSocket.EndAccept(ar);

Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000); <----- All request is stopped, no response returned.

// ....
}

我在 serverSocket.EndAccept 之后放了“Thread.Sleep(100000)”,我发现剩余的请求没有被接受。这是示例输出:
  • 如果 Thread.Sleep(100000) 被禁用/注释,控制台显示:
  • 服务器线程#10
  • 客户端线程#11
  • 服务器线程#10
  • 客户端线程#11
  • 服务器线程#10
  • 客户端线程#11
  • 等等...
  • 如果启用了 Thread.Sleep(100000),控制台会显示:
  • 服务器线程#10
  • 客户端线程#11
  • ...在第一个请求完成之前没有接受其他客户端请求。

  • 对这种情况有什么解释吗?谢谢

    最佳答案

    只要你打电话

    Socket clientSocket = serverSocket.EndAccept(ar);

    您需要调用您的 BeginAccept在服务器套接字上再次方法。

    所以函数看起来像这样:
    private void AcceptCallback(IAsyncResult ar)
    {
        allDone.Set();

        Socket serverSocket = (Socket)ar.AsyncState;
        Socket clientSocket = serverSocket.EndAccept(ar);
    serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);

        Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
        Thread.Sleep(100000);

        // ....
    }

    关于C#异步服务器套接字定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6641806/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com