【请教】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);
}
}
}
还有个问题也顺便问下------>如何让控制台的程序运行的 时候没有那个黑色的框框