【请教】C#写的C/S关于socket断开时的问题

X骆驼 2010-03-04 06:34:01
最近没事写的C/S写这玩的

遇到一个socket断开时的问题

就是当client那端异常断开socket这server这边应该将这个socket移出

我用的是接受client发来的数据包,可以catch到断开的异常然后做出断开这个socket的操作

问题就是 当连接上了的client多了的时候 当client断开的异常就不能全部catch到

能有什么办法可以解决这个问题

当client断开socket时server这边就能得到消息,即使做出操作。。。。。

望高手指点

下面是源码:
//接受用户消息的专用线程
private void threaduser(object userip)
{
Socket usersock=null;
for (int i = 0; i < socketlist.Count; i++)
{
Socket news = (Socket)socketlist[i];
string newip = news.RemoteEndPoint.ToString().Remove(news.RemoteEndPoint.ToString().IndexOf(":"));

if (userip.Equals(newip))
{
usersock = news;
}
}
while (flag)
{
try
{
byte[] b = new byte[100];
int k = usersock.Receive(b);
for (int i = 0; i < k; i++)
{
Console.Write(Convert.ToChar(b[i]));
}
}
catch (SocketException ex)
{
//MessageBox.Show("777777" + ex.Message);

//当用户断开连接时及时从socketlist中移除这个socket
socketlist.Remove(usersock);
//usersock.Close();
//并更新listview中的现实iplist
for (int i = 0; i < iplist.Count; i++)
{
object tempobj = iplist[i];
string[] liststr = tempobj.ToString ().Split(new char[] { ':' });
if (userip.Equals(liststr[0]))
{
iplist.RemoveAt(i);
}
}
if (iplist.Count >= 0)
{
show();
}
threaduse.Abort(userip);
}
}

}

还有个问题也顺便问下------>如何让控制台的程序运行的 时候没有那个黑色的框框
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alden 2010-03-05
  • 打赏
  • 举报
回复
服务端定时轮巡检测客户端是否连接,可以参考SNMP的管理机制.
如果客户端太多的话,不建议使用TCP,用UDP好点,如果数据量不大不频繁,可以考虑短连接.
X骆驼 2010-03-05
  • 打赏
  • 举报
回复
引用 2 楼 whb147 的回复:
如果掉电呢?
都来不及

隔一段时间从服务端发一个请求,如果没有反应,就算断开了


这个想法也可行 我试试啊

用time控件定时发数据包 再catch

有想法是很好的。。。。。

去实现下。
wsfyc009 2010-03-05
  • 打赏
  • 举报
回复
CLIENT正常断开,那么对应CLIENT的SERVER的SOCKET连接会接受到断开信息(一个空的数据)。
但是如外部断电,死机等意外SERVER就无法检测到的,需要通过心跳包判断某个SOCKET连接是否正常,不正常就释放掉
guoyichao 2010-03-05
  • 打赏
  • 举报
回复
C#包装网络IO操作太高级了,一般要组合多种方式进行检测,才能及时准确的监测出。

这里有个源代码的例子:
http://code.google.com/p/tinynetevent/
whb147 2010-03-04
  • 打赏
  • 举报
回复
如果掉电呢?
都来不及

隔一段时间从服务端发一个请求,如果没有反应,就算断开了
huang1196 2010-03-04
  • 打赏
  • 举报
回复
等待高手。....。。

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧