Ich habe mich gefragt, ob ich bei einer Anwendung, die ich gerade entwickle, richtig vorgehe. Die Anwendung muss eingehende TCP-Verbindungen empfangen und einen Thread pro Anruf verwenden, damit der Server mehrere Anrufe parallel beantworten kann.
Was ich tue, ist ein Anruf BeginAcceptTcpClient
sobald ich einen akzeptierten Kunden habe. Ich vermute, dass wenn die ConnectionAccepted
Methode getroffen wird, befindet sie sich eigentlich in einem separaten Thread.
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();
}
}
Mache ich das richtig?
Zum Wohl.