int count = socket.Receive(data, receiveLength, SocketFlags.None);
我在用上面的代码收数据的时候,如果对方发送的一帧数据少于我设定的receiveLength,也会接收完成
比如我设置receiveLength=20,而对方一帧只发了19个,代码会执行完,不应该是中断在这里的吗?
现在要怎么样才能满足我的需求,收满我需要的数据才继续往下?

解决方案 »

  1.   


    EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
                            int recvNum = m_udpListenSckt.ReceiveFrom(m_recvBuffer, ref remoteEP);                        StateObject stateObj = new StateObject();
                            stateObj.remoteIpe = (IPEndPoint)remoteEP;
                            byte[] recvData = new byte[recvNum];
                            Array.Copy(m_recvBuffer, 0, recvData, 0, recvNum);
                            stateObj.buffer = recvData;
    class StateObject
        {
            /// <summary>
            /// 远程服务器端点
            /// </summary>
            public IPEndPoint remoteIpe;
            public byte[] buffer;
        }
      

  2.   

    定义的Length 的意义是
    从接收缓冲区一次拿取的最大的长度如果一次发过来的长度大于你这个定义的长度则会抛异常
    反之 如果小于你定义的长度的话 则会直接 Receive出来
    注意 Receive 方法的返回值是 int 类型  表示 读出的有效位
      

  3.   

    这个receiveLength的意义是指:你程序中接收数据缓冲区的大小  可以是1024 也可以是100  理论上可以是随意大小  并不是说只有缓冲区装满了  Receive才会返回  Receive什么时候返回不是你能控制的   如果数据量大  一般转满就返回   否则  没装满 Receive它也会返回    Tcp中是这样的