日期:2014-05-17  浏览次数:21044 次

关于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