您的位置:首页 > 编程语言 > C#

详解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();


服务器响应函数:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: