详解C#中Socket通信(四):使用哈希表管理客户端

public void StartListening()
{           
    //获取本机IP地址
    IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
    HostIP = ipHost.AddressList[0];            
    try
    {
        IPEndPoint iep = new IPEndPoint(HostIP, 9004);
        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        serverSocket.Bind(iep);
        serverSocket.Listen(100);                
        
        //如果有客户端连接进来,就加入队列               
        while (flag)
        {                    
            clientSocket = serverSocket.Accept();
            if (clientSocket != null)
            {                        
                string str = clientSocket.RemoteEndPoint.ToString();
                string[] Ipstr = str.Split(':');
                string clientIp = Ipstr[0];
                PVS_Client PvsClient; 
                if (clientList.Contains(clientIp))
                {                            
                    PvsClient = (PVS_Client)clientList[clientIp];
                    PvsClient.killSelf();
                 }
                PvsClient = new PVS_Client(clientSocket);
                //注册断开事件
                PvsClient.OnClientdisConnect += new PVS_Client.clientdisConnect(this.removeclient);
                //注册消息事件
                PvsClient.OnclientMessage += new PVS_Client.clientMessage(this.getClientMessage);                 clientList.Add(clientIp, client);
            }      
       }
   }
   catch (Exception e)
   {                
       MessageBox.show(e.Message);
   }
}
//断开处理函数
private void removeclient(object sender, EventArgs e)
{
}
//消息处理函数
private void getClientMessage(object sender, EventArgs e, string message)
{
 
}

 多客户端可以使用哈希表进行管理。Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.哈希表的操作主要有:

  • 在哈希表中添加元素:HashtableObject.Add(key,value);
  • 在哈希表中去除元素:HashtableObject.Remove(key);
  • 从哈希表中移除所有元素:HashtableObject.Clear(); 
  • 判断哈希表是否包含特定键key:HashtableObject.Contains(key);

    现在,我们改写服务器端代码,如果同一IP登陆的话,就删除原来的客户端,重新建立客户端,在类定义中添加客户端列表:

public Hashtable clientList = new Hashtable();


服务器响应函数:




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值