Мне было интересно, правильно ли я работаю в приложении, которое создаю. Приложение должно принимать входящие 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();
}
}
Я правильно делаю?
Приветствие.