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();
            }
        }
    }