碰上一个爆难的问题,问问大侠们.解决马上结贴.
AcceptCallback(IAsyncResult ar)
{
}
ReadCallback(IAsyncResult ar)
{
try
{
int bytesRead = handler.EndReceive(ar);
}
catch(Exception e)
{
//这是一个中转服务器程序,如果一个接收数据的客户端不是正常退出的话
//在走到 int bytesRead = handler.EndReceive(ar); 的时候会跳到这
//这个异常里面来,但问题是只要有一个客户端不是正常退出所有的连接都出了异常
//数据也就不转发了.
}
}
Send(Socket handler, byte[] byteData)
{
}
SendCallback(IAsyncResult ar
{
}
问题点数:100、回复次数:8Top
1 楼OriesMap()回复于 2004-12-03 16:04:22 得分 0
不太清楚,不过我猜想服务端与客户端通信时一定会是点对点方式的。它就不应该把所有的连接都出现异常了。
帮你顶一把吧。Top
2 楼zxilu(江湖)回复于 2004-12-03 16:04:59 得分 10
你是有很多客户端链接,然后服务器给每个客户端发送数据吗?我最近刚好也在做这个事情,我是把每个链接的socket都放在一个数组里面,然后逐个的去送,你其实只要把try放在循环里面就好了,放在循环外的话一出错当然就退出了。Top
3 楼zxilu(江湖)回复于 2004-12-03 16:08:59 得分 10
把try放在循环里面,只要发送出错,我就把那个数组(ArrayList)的当前数据移除,这样可以避免数据无限制的变大。Top
4 楼nga96(因为我笨,所以努力。陈勇华)回复于 2004-12-03 18:34:09 得分 20
sorryTop
5 楼flame_qin(flame)回复于 2004-12-03 19:26:22 得分 20
学习Top
6 楼cnhgj(戏子) (没时间练太极)回复于 2004-12-03 19:35:54 得分 20
看看e.Message里有什么特征,然后做一下处理Top
7 楼still_alive(绝对黑色)回复于 2004-12-03 19:37:46 得分 20
try
{
//在这个地方加一句,
Application.DoEvents();
可以帮你解决这个问题!
int bytesRead = handler.EndReceive(ar);
}
Top
8 楼programbin(终极猫咪)回复于 2004-12-04 18:38:03 得分 0
e.Message 是这样的 “远程主机强迫关闭了一个现有的连接”
我用上了
try
{
//在这个地方加一句,
Application.DoEvents();
可以帮你解决这个问题!
int bytesRead = handler.EndReceive(ar);
}
也不行,还客户端断一个所有的连接都断了。
请大家想想办法。Top




