我现在是通过异步接收数据函数中的异常来判断的。而且如果客户端是delhpi的话,不会出异常,而是会不停的触发回调函数。好像客户端连接断开,就会触发异步接受数据的回调函数。怎么样才能正确判断呢?//异步接收数据的回调函数。
public static void OnRecieve(IAsyncResult IR)
{
try
{
Console.WriteLine("<SYS>进入接收...");
Socket RecSocket = (Socket)IR.AsyncState;
int isize = RecSocket.EndReceive(IR);
string msg = Encoding.ASCII.GetString(tmpbuff);
Console.WriteLine("<MSG>:" + msg);
RecSocket.Send(Encoding.ASCII.GetBytes("return:" + msg));
if ((isize == 0)) //针对Delhpi的断开连接 {
RecSocket.Shutdown(SocketShutdown.Both);
RecSocket.Disconnect(false);
} tmpbuff = new byte[buffsize]; RecSocket.BeginReceive(tmpbuff, 0, tmpbuff.Length, SocketFlags.None, OnRecieve, RecSocket);
}
catch (SocketException er) //针对C#的断开连接
{
if (er.ErrorCode == 10054)
{
Console.WriteLine("<SYS>连接已中断!");
}
}
}
public static void OnRecieve(IAsyncResult IR)
{
try
{
Console.WriteLine("<SYS>进入接收...");
Socket RecSocket = (Socket)IR.AsyncState;
int isize = RecSocket.EndReceive(IR);
string msg = Encoding.ASCII.GetString(tmpbuff);
Console.WriteLine("<MSG>:" + msg);
RecSocket.Send(Encoding.ASCII.GetBytes("return:" + msg));
if ((isize == 0)) //针对Delhpi的断开连接 {
RecSocket.Shutdown(SocketShutdown.Both);
RecSocket.Disconnect(false);
} tmpbuff = new byte[buffsize]; RecSocket.BeginReceive(tmpbuff, 0, tmpbuff.Length, SocketFlags.None, OnRecieve, RecSocket);
}
catch (SocketException er) //针对C#的断开连接
{
if (er.ErrorCode == 10054)
{
Console.WriteLine("<SYS>连接已中断!");
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货