关于C#异步时0字节的处理
本帖最后由 sostonesi 于 2013-07-25 18:30:47 编辑 1、Socket服务端,客户端是用C语言写的移动设备。在C#接收设备发过来的信息时有个现象,当设备断开连接的时候,服务端无法获知,只是接收到大量的0字节的包。
2、服务端采用异步方式进行获取,以下为代码
void asyncAcceptCall(IAsyncResult ar)
{
//服务器的Socket
//AsyncState 状态 获取用户定义的对象
Socket ServerSocket = (Socket)ar.AsyncState;
//异步接受传入的连接尝试,并创建新的 Socket 来处理远程主机通信
Socket ClientSocket = ServerSocket.EndAccept(ar);
IPEndPoint ipEnde = (IPEndPoint)ClientSocket.RemoteEndPoint;
SocketInfo socketInfo = new SocketInfo();
allDone.Set();
try
{
readDone.Reset();
if (ClientSocket.Connected)
{
socketInfo.Client.BeginReceive(
socketInfo.Buff,
0,
2048,
SocketFlags.None,
new AsyncCallback(asynReceCall),
socketInfo
);
}
}
catch (SocketException)
{
}
catch (Exception e)
{
Console.log(e.ToString());
}
finally
{
readDone.WaitOne();
}
}