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);
public Hashtable clientList = new Hashtable();
服务器响应函数: