110,561
社区成员
发帖
与我相关
我的任务
分享
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());
}
}