socket服务端的错误,帮忙看看.

xieyueqing 2010-06-25 04:11:01
我用C#写的socket服务器端,客户端是别人用Delhpi写的,两者用winsock通讯。

现在测试用大量客户端连接服务端,出现大量错误:

13:49:54 <SYS>MBoxSocketServer.OnRecieve异常:System.Net.Sockets.SocketException: 由于以前的关闭调用,套接字在那个方向已经关闭,发送或接收数据的请求没有被接受。
在 System.Net.Sockets.Socket.BeginReceive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, AsyncCallback callback, Object state)
在 MBoxServer.MBoxSocketServer.OnRecieve(IAsyncResult IR)


高手帮忙看看是因为什么原因,谢谢!

代码如下:

//异步接收数据
private void OnRecieve(IAsyncResult IR)
{
if (sNo >= 2000000000) //防止溢出
sNo = 1;
else
sNo++;

string sRemote = "";
RCommDataBlock rcdb = new RCommDataBlock();
RCommDataBlock rcdb1 = new RCommDataBlock();
Socket RecSocket = (Socket)IR.AsyncState;
sRemote = RecSocket.RemoteEndPoint.ToString();
try
{
//Console.WriteLine("");
//Console.WriteLine("<SYS>MBoxSocketServer.OnRecieve:接收到请求 (" + sNo.ToString() + ") " + DateTime.Now.ToString("HH:mm:ss"));

int isize = RecSocket.EndReceive(IR);

rcdb = Buff2Block(InfoBuff);

//*调试信息*
CommUnits.PrintBlock(rcdb);

ClientData UserSession;
if (htSession.Contains(sRemote))
UserSession = (ClientData)htSession[sRemote];
else
throw new Exception("没有找到该客户端的ClientData!");


//****调用业务处理***********************
MainUnit mu = new MainUnit();
rcdb1 = mu.DoWork(rcdb, UserSession);
//***************************************


byte[] returnbuff = new byte[buffsize];
returnbuff = Block2Buff(rcdb1);
//Console.WriteLine("<SYS>MBoxSocketServer.OnRecieve:return!");
RecSocket.Send(returnbuff);

if ((isize == 0))
{
RecSocket.Shutdown(SocketShutdown.Both);
RecSocket.Disconnect(false);
}

InfoBuff = new byte[buffsize];

RecSocket.BeginReceive(InfoBuff, 0, InfoBuff.Length, SocketFlags.None, OnRecieve, RecSocket);
}
catch (SocketException er)
{
if (er.ErrorCode == 10054 || er.ErrorCode == 10053)
{
htSession.Remove(sRemote);
//Console.WriteLine("");
//Console.WriteLine("<SYS>MBoxSocketServer.OnRecieve:连接已中断!");
CommUnits.WriteLog("<SYS>MBoxSocketServer.OnRecieve:连接已中断!");
}
else
//Console.WriteLine("<SYS>MBoxSocketServer.OnRecieve异常:" + er.ToString());
CommUnits.WriteLog("<SYS>MBoxSocketServer.OnRecieve异常:" + er.ToString());
}
}
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
if ((isize == 0))
{
RecSocket.Shutdown(SocketShutdown.Both);
RecSocket.Disconnect(false);
}
这里都关了,怎么下面还有

RecSocket.BeginReceive(InfoBuff, 0, InfoBuff.Length, SocketFlags.None, OnRecieve, RecSocket);

110,561

社区成员

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

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

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