Socket异常:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败

SadEmprie 2009-09-22 02:37:04

//接受一个客户端的连接请求
Socket oldserver = (Socket) iar.AsyncState;

Socket client = oldserver.EndAccept(iar);

//检查是否达到最大的允许的客户端数目
if (_clientCount == _maxClient)
{
//服务器已满,发出通知
if (ServerFull != null)
{
ServerFull(this, new NetEventArgs(new Session(client)));
}

}
else
{

Session newSession = new Session(client);

_sessionTable.Add(newSession.ID, newSession);

//客户端引用计数+1
_clientCount++;

//开始接受来自该客户端的数据
client.BeginReceive(_recvDataBuffer, 0, _recvDataBuffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveData), client);

//新的客户端连接,发出通知
if (ClientConn != null)
{
ClientConn(this, new NetEventArgs(newSession));
}
}

//继续接受客户端
_svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock);


上述代码有时会引发 如标题所述的Socket异常,用try-catch虽然能捕捉到异常,可是从发生异常开始再过几分钟,程序本身就无法接收到数据了,请问可能的原因是什么? 如此该如何处理?

另:客户端由另外部分开发,目前没有客户端代码。

多谢!
...全文
3906 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小酱油哇 2011-06-16
  • 打赏
  • 举报
回复
我也遇到这个问题啊,都快崩溃了。。。。高手。。。在哪呢。。。。
风之影子 2009-09-22
  • 打赏
  • 举报
回复
建议楼主看看socket通讯的原理。


出现这种情况的原因太多。

比如:你所要连接的服务器根本不存。
或是服务器只允许一个用户连接,而现在已有用户连接。
等等

都会报同样的错误。
hhj112 2009-09-22
  • 打赏
  • 举报
回复
用连接池看看
梦里开天 2009-09-22
  • 打赏
  • 举报
回复
我也有这个问题,现在索性,服务端不进行socket close操作,一操作就接不到数据,查了一个礼拜愣是没找到。
现在不得不保持原有连接,当连接数达到一定后进行服务器重启,类似看门狗。
我也等待答案中。。。。。。。。。。。。
SadEmprie 2009-09-22
  • 打赏
  • 举报
回复
我在catch()里面加上 _svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock); 是否可以?
lw476906635 2009-09-22
  • 打赏
  • 举报
回复
线程 断线重新连接
EsMo 2009-09-22
  • 打赏
  • 举报
回复
重新建立socket 重新连接

110,533

社区成员

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

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

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