SerializationException: End of Stream encountered before parsing was completed.

socket发送的数据转为byte[]后长度超过1460,导致每次循环只接收了一部分,导致反序列化失败。把当前数据存起来,和下次的拼在一起就行了。


    public static void ReceiveMessage()
    {
        if (server == null)
        {
            if (clientOrListening) server = link;
            else server = link.Accept();
        }

        while (true)
        {
            byte[] buffer = new byte[1024 * 1024];
            int currentLength = server.Receive(buffer);//利用阻塞防止界面卡住

            while (server.Available > 0)
            {
                byte[] bytes = new byte[1460];
                int receiveLength = server.Receive(bytes);

                Array.Copy(bytes, 0, buffer, currentLength, receiveLength);

                currentLength += receiveLength;
            }

            if (currentLength > 0)
            {
                MemoryStream memory = new();
                memory.Write(buffer, 0, currentLength);
                memory.Position = 0;

                BinaryFormatter bf = new();
                NetworkMessage message = bf.Deserialize(memory) as NetworkMessage;
                Debug.Log("SocketClient.ReceiveMessage 接收消息=" + message.ToString());
                enemyActionQueue.Enqueue(message);

                memory.Close();
            }
        }
    }
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值