黑马程序员技术交流社区
标题:
socket通信服务端实时删除掉线的客户端问题
[打印本页]
作者:
戴伟
时间:
2012-7-4 08:56
标题:
socket通信服务端实时删除掉线的客户端问题
服务端这里对客户端连接做了try...catch处理,但是无法有效地除掉已经掉线的客户端
private void button2_Click(object sender, EventArgs e)
{
button2.Enabled = false;
byte[] btMsg = System.Text.Encoding.UTF8.GetBytes("OpenDoor");
if (dict.Count < 1)
{
PlaySoundNobody();
return;
}
//遍历所有的客户端,给每个客户端发送客人到访消息
foreach (Socket sock in dict.Values)
{
try
{
sock.Send(btMsg);
}
catch (SocketException ex)
{
dict.Remove(sock.LocalEndPoint.ToString());
lbContent.Items.Add(ex.Message);
}
}
//用独立的线程播放音频文件
Thread thread = new Thread(PlaySound);
thread.IsBackground = true;
thread.Start();
}
复制代码
作者:
许庭洲
时间:
2012-7-4 09:11
把除掉已经掉线的客户端处理模块放到finaly{ }试试看:
try
{
//给每个客户端发送客人到访消息
}
catch (SqlException e2)
{
......
}
finaly
{
//除掉已经掉线的客户端
dict.Remove(sock.LocalEndPoint.ToString());
lbContent.Items.Add(ex.Message);
}
作者:
王玲星
时间:
2012-7-5 01:15
这位锅锅是想完整的实现QQ么? 求指导~~~ {:soso_e196:}
作者:
戴伟
时间:
2012-7-5 09:36
搞定了,foreach内部不能修改被循环的集合对象,在foreach外面加了个arraylist,把sock.RemotEndPoint.ToString()添加进去,然后再根据arraylist删除掉线的sock
王星玲,我的一个项目在做socket,我想实现自动重连的功能,这个是我碰到的一个问题,呵呵
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2