ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemnetsocketssocketclassselecttopic.htm

解决方案 »

  1.   

    有没有什么好的办法可以得到局域网现在有多少用户正在线阿?
    我现在是这样写的。好慢。
                              list.Items.Clear();

     
     
    for (int i = 1;i<=255;i++)
    { string IP = "192.168.0." + i.ToString();;
     
     
    myServer = new IPEndPoint(IPAddress.Parse(IP), myPort);  
    Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
     
     

    try
    {
    socket.Connect(myServer);
        
     

     

    if(socket.Connected)
    { bool addBool = true; for(int iii=0;iii<list.Items.Count;iii++)
    {

    if(list.Items[iii].SubItems[0].Text == IP)
    {

    addBool = false;
    break;
    }
    else
    {

    continue;
    } }
     
    if(addBool)
    {
    ListViewItem objItem = new ListViewItem();
    objItem.SubItems[0].Text  = IP ;
    objItem.SubItems.Add(Dns.GetHostByAddress(IPAddress.Parse(IP)).HostName) ;
    list.Items.Add(objItem);
    }
    }
     
     
    }
     


       
     
    catch 
    {

     

     
    for(int ii=0;ii<list.Items.Count;ii++)
    {

    if(list.Items[ii].SubItems[0].Text == IP)
    {

    list.Items[ii].Remove();
    break;
    }
      }
     
    }

      

  2.   

    简单的很,你在服务器端维护客户连接
    listener.Start();
    Console.WriteLine("正在等待客户端连接");
    Console.WriteLine("按 Ctrl+C 退出..."); while (cont) 
    {
    // 接受将阻塞,直到有人连接
    Socket socket = listener.AcceptSocket();
                                       List.add(socket.RemoteEndPoint.Tostring());
      

  3.   

    远程客户:socket.RemoteEndPoint.Tostring(),这个在发生数据传送或者连接时都会得到至于在线人数:我觉得最简单的方法是,维护一个hash表,这个表当服务器接受一个连接后就增加一个
    ,当然,当客户端发生异常退出时关闭socket并在hash表中除去这个连接。建议:hash表的key使用socket对象,而不是ip地址,因为一个ip可能允许多个客户的连接
      

  4.   

    help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemnetsocketssocketclassselecttopic.htm