0

無期限にリッスンし、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);
        }
    }
}

私はこのトピックに比較的慣れていないので、次のことを疑問に思います。

  1. このコードにどのような改善を提案しますか?
  2. リスナーを適切に停止する方法 (現在は をスローしObjectDisposedExceptionます)。
  3. .net tcp リスナーのより高度なサンプルはありますか?
4

0 に答える 0