服务器端
static void AcceptResults(IAsyncResult ar)
{
   Socket Listen = (Socket)ar.AsyncState;
   if (连接数 < 最大连接数)
   {
      Socket s = Listen.EndAccept(ar);
      ...
   }
   else
   {
     Trace.WriteLine("Refuse");
     return;
   }
}客户端
public void Connect()
{
ConnectSocket = new Socket(AddressFamily.InterNetwork, 
                        SocketType.Stream,
ProtocolType.Tcp);
try
{
ConnectSocket.Connect(ServerPoint);
if (SI.ConnectSocket.Connected)
{
SI.ReceiveThread = new Thread(new ThreadStart(SI.Receive));
SI.ReceiveThread.Start(); GblDeclare.AddMsg("Connected");
}
}
catch (Exception ex)
{
GblDeclare.AddMsg(ex.Message.ToString());
Trace.WriteLine(ex.Message.ToString());
}
}服务器端明明显示Refuse,但是客户端还是显示Connected。
问题一:到底该如何拒绝客户端连接,而客户端又能立即知道自己被拒绝?
问题二:如何在服务器端知道等待连接的客户机IP?

解决方案 »

  1.   

    问题一:到底该如何拒绝客户端连接,而客户端又能立即知道自己被拒绝?
    ----------
    Socket Listen = (Socket)ar.AsyncState;
    Socket s = Listen.EndAccept(ar);   if (连接数 < 最大连接数)
       {
                ...
       }
       else
       {
         Trace.WriteLine("Refuse");
         s.close();//直接关闭对方连接
         return;
       }问题二:如何在服务器端知道等待连接的客户机IP?
    ----
    s.Connect(lep);// Using the RemoteEndPoint property.
    Console.WriteLine("I am connected to " + IPAddress.Parse(((IPEndPoint)s.RemoteEndPoint).Address.ToString()) +
      "on port number " + ((IPEndPoint)s.RemoteEndPoint).Port.ToString());// Using the LocalEndPoint property.
    Console.WriteLine("My local IpAddress is :" +  IPAddress.Parse(((IPEndPoint)s.LocalEndPoint).Address.ToString()) +
    "I am connected on port number " + ((IPEndPoint)s.LocalEndPoint).Port.ToString());
      

  2.   

    下面的示例尝试异步接收传入连接。IPHostEntry lipa = Dns.Resolve("host.contoso.com");
    IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);   Socket s = new Socket(lep.Address.AddressFamily,
                                      SocketType.Stream,
                                         ProtocolType.Tcp);
       try{
            s.Bind(lep);
            s.Listen(1000);//最大连接数为1000        while(true){
                 allDone.Reset();             Console.WriteLine("Waiting for a connection...");
                 s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_Callback), s);             allDone.WaitOne();
            }
       }
       catch (Exception e){
            Console.WriteLine(e.ToString());
       }
      

  3.   

    执行了这句
    Socket s = Listen.EndAccept(ar);
    当然可以拿到很多资料。但我是想知道是否可以从IAsyncResult里获取待连接的客户机资料
      

  4.   

    To singleflower(shifan(愿父亲安息))
    您好像理解错我的意思了,我是想知道如何拒绝异步连接的客户机,不是如何连接。