我知道的情况是发送端发一次,数据量大,接收端要分几次来接。
可以在消息结尾加个特殊标记,然后发送。接收端有个变量,接收后判断消息是否包含那个特殊标记,若包含则是完整信息。若不含,则把消息追加到变量里,直到收到含标记的信息为止。这是变量里的消息则是一条完整信息了。最后记得清空变量。
仅供参考,不敢说这样写肯定合适。

解决方案 »

  1.   

    private void OnReceive() {
                try {
                    ReceiveData rd = new ReceiveData(this.ReceiveSize, this.Socket);
                    this.socket.BeginReceive(rd.Buffer, 0, rd.Buffer.Length, SocketFlags.None, new AsyncCallback(this.ReceiveCall), rd);
                }
                catch (Exception ex) {
                    this.OnError(ex);
                }
    }
     public void Send(byte[] bytes) {
                if (bytes.Length > this.ReceiveSize) {
                    DataPackage[] dps = DataPackageCollection.GetDataPackages(bytes, this.ReceiveSize);
                    foreach (DataPackage item in dps) {
                        this.OnSend(DataPackage.GetData(item));
                    }
                }
                else
                    this.OnSend(bytes);
    }
    private void SendCall(IAsyncResult ar) {
                try {
                    Channel msg = (Channel) ar.AsyncState;
                    msg.Socket.EndSend(ar);
                }
                catch (Exception ex) {
                    this.OnError(ex);
                }
            }