無期限にリッスンし、tcp ポートからのデータ フィードを処理するために、tcp リスナーを使用して Windows サービスを実装する必要があり、.NET 4.5 非同期機能を使用するサンプルを探しています。
これまでに見つけた唯一のサンプルは次のとおりです。
class Program
{
private const int BufferSize = 4096;
private static readonly bool ServerRunning = true;
static void Main(string[] args)
{
var tcpServer = new TcpListener(IPAddress.Any, 9000);
try
{
tcpServer.Start();
ListenForClients(tcpServer);
Console.WriteLine("Press enter to shutdown");
Console.ReadLine();
}
finally
{
tcpServer.Stop();
}
}
private static async void ListenForClients(TcpListener tcpServer)
{
while (ServerRunning)
{
var tcpClient = await tcpServer.AcceptTcpClientAsync();
Console.WriteLine("Connected");
ProcessClient(tcpClient);
}
}
private static async void ProcessClient(TcpClient tcpClient)
{
while (ServerRunning)
{
var stream = tcpClient.GetStream();
var buffer = new byte[BufferSize];
var amountRead = await stream.ReadAsync(buffer, 0, BufferSize);
var message = Encoding.ASCII.GetString(buffer, 0, amountRead);
Console.WriteLine("Client sent: {0}", message);
}
}
}
私はこのトピックに比較的慣れていないので、次のことを疑問に思います。
- このコードにどのような改善を提案しますか?
- リスナーを適切に停止する方法 (現在は をスローし
ObjectDisposedException
ます)。 - .net tcp リスナーのより高度なサンプルはありますか?