gpt4 book ai didi

.net - 对于异步 TCP 监听器,此模式是否正确?

转载 作者:行者123 更新时间:2023-12-03 03:29:41 27 4
gpt4 key购买 nike

我想知道我正在构建的应用程序是否做得正确。应用程序必须接收传入的 TCP 连接,并为每个调用使用一个线程,以便服务器可以并行应答多个调用。

我正在做的就是在收到接受的客户端后立即再次调用BeginAcceptTcpClient。我猜当 ConnectionAccepted 方法被调用时,它实际上是在一个单独的线程中。

public class ServerExample:IDisposable
{
TcpListener _listener;
public ServerExample()
{
_listener = new TcpListener(IPAddress.Any, 10034);
_listener.Start();
_listener.BeginAcceptTcpClient(ConnectionAccepted,null);
}

private void ConnectionAccepted(IAsyncResult ia)
{
_listener.BeginAcceptTcpClient(ConnectionAccepted, null);
try
{
TcpClient client = _listener.EndAcceptTcpClient(ia);

// work with your client
// when this method ends, the poolthread is returned
// to the pool.
}
catch (Exception ex)
{
// handle or rethrow the exception
}
}

public void Dispose()
{
_listener.Stop();
}
}

我做得对吗?

干杯。

最佳答案

那么你可以像这样使方法静态:

private static void ConnectionAccepted(IAsyncResult ia)
{
var listener = (TcpListener)result.AsyncState;
TcpClient client = listener.EndAcceptTcpClient();
listener.BeginAcceptTcpClient(ConnectionAccepted, listener);
// .....
}

也许您不希望它是静态的,但这样您就可以将方法移动到您喜欢的位置,并且不依赖于此类中的成员变量,而是依赖于另一个类中的成员变量。即:解耦服务器 TCP 逻辑和服务器客户端逻辑。

关于.net - 对于异步 TCP 监听器,此模式是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5705899/

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