2013-01-13 75 views
0

異步TCP服務器我可以得到一個客戶端。異步TCP服務器我可以得到一個客戶端

當我有一個以上的client.I剛剛獲得第一個客戶在服務器上,但其他客戶端連接的客戶端。

這裏是我的服務器代碼:

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); 
    } 
} 
} 

回答

0

TcpListener.BeginAcceptTcpClient只監聽一個傳入的連接。你需要一次又一次地調用它,也許在你的回調方法:

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); 
}