0

非同期TCPサーバー私はただ1つのクライアントを取得できます。

複数のクライアントがある場合。サーバーで最初のクライアントを取得しますが、他のクライアントはクライアントで接続します。

これが私のサーバーコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;

namespace BeginAcceptTcpClientserver
{

class Program
{

    static void Main(string[] args)
    {
        TcpListener listener = new TcpListener(1234);
        listener.Start();
        listener.BeginAcceptTcpClient(callbake,listenner);

        Console.WriteLine("print q to quit");
        ConsoleKey key;
        do 
        {
            key = Console.ReadKey().Key;
        } while (key != ConsoleKey.Q);

    }
    static void callbake(IAsyncResult ar)
    {

        TcpClient clienter = ((TcpListener)ar.AsyncState).EndAcceptTcpClient(ar);
        Console.WriteLine("---client connect {0}<--{1} ---", clienter.Client.LocalEndPoint, clienter.Client.RemoteEndPoint);
    }
}
}
4

1 に答える 1

0

TcpListener.BeginAcceptTcpClientは、1つの着信接続のみをリッスンします。おそらくコールバックメソッドで、何度も呼び出す必要があります。

static void callbake(IAsyncResult ar)
{
    // call BeginAcceptTcpClient here so that it's called everytime a connection is accepted
    TcpListener listener = (TcpListener)ar.AsyncState;
    listener.BeginAcceptTcpClient(new AsyncCallback(callbake), listener);

    TcpClient clienter = listener.EndAcceptTcpClient(ar);
    Console.WriteLine("---client connect {0}<--{1} ---", clienter.Client.LocalEndPoint, clienter.Client.RemoteEndPoint);
}
于 2013-01-13T06:16:34.920 に答える