详解C#中Socket通信(四):使用哈希表管理客户端
2013-10-28 13:52
375 查看
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键值对.哈希表的操作主要有:
[align=left]在哈希表中添加元素:HashtableObject.Add(key,value);[/align]
[align=left]在哈希表中去除元素:HashtableObject.Remove(key);[/align]
[align=left]从哈希表中移除所有元素:HashtableObject.Clear(); [/align]
[align=left]判断哈希表是否包含特定键key:HashtableObject.Contains(key);[/align]
现在,我们改写服务器端代码,如果同一IP登陆的话,就删除原来的客户端,重新建立客户端,在类定义中添加客户端列表:
public Hashtable clientList = new Hashtable();
服务器响应函数:
相关文章推荐
- 使用git客户端软件GitHub Desktop来管理项目
- 使用jQuery的插件在客户端来管理Cookie
- 使用客户端MercurialEclipse1.1.867进行源码管理的问题
- Git图形管理界面TortoiseGit客户端的安装和使用
- 使用Project客户端和Project Server进行项目管理
- 项目管理实践(SVN服务器以及TortoiseSVN客户端的使用)
- Android客户端之“微服私访”App的系统学习(八)调用系统摄像头拍照并管理照片并使用Okhttp上传文件至后台
- 使用Project客户端和Project Server进行项目管理
- 2008R2Win7管理二十六ADRMS客户端使用及侦错
- Visual Studio 2017中使用Libman管理客户端库
- 使用Project客户端和Project Server进行项目管理
- 2008R2Win7管理二十六ADRMS客户端使用及侦错 推荐
- VAMT3管理工具:查看哪些客户端使用kms进行了激活
- 使用mysql客户端工具远程管理mysql服务器
- 使用GitHub for Windows客户端管理京东代码库项目
- windows环境下使用git客户端、GitHub和TortoiseGit管理项目代码
- 使用GIT进行源码管理――GUI客户端小结
- windows环境下使用git客户端、GitHub和TortoiseGit管理项目代码
- 2008R2Win7管理二十六ADRMS客户端使用及侦错