Все работает в Unity, но не на Android - PullRequest
0 голосов
/ 15 сентября 2018

Я создал серверную / клиентскую игру в visual studio.Приложения подключаются через TCP.После того, как все заработало как задумано, я создал клиентское приложение в Unity.Когда я играю в игру в приложении Unity, все в порядке (клиент общается с сервером и т. Д.).Когда я экспортирую игру в Windows, игра в порядке.Проблема в том, что когда я экспортирую его в Android (apk), игра на устройстве не взаимодействует с сервером.

При использовании отладчика я обнаружил, что первая проблема (не уверен, что их больше) возникает, когда я пытаюсьсжать и разделить пакет для отправки.Я делю каждый пакет на 1024 и присоединяюсь к получателю.

Класс упаковки:

public class MessageBoxPack
    {
        private List<MessageBox> msgBoxContainer;
        private byte[] msgByte { get; set; }
        private MessageBox msgBox;
        private int bufferSize;

        public List<MessageBox> PrepareMsgBoxList(MessageSlip msg, int _bufferSize)
        {                
            msgBoxContainer = new List<MessageBox>();
            bufferSize = _bufferSize;
            ConvertMessageToBytes(msg);
            return msgBoxContainer;
        }

        private void ConvertMessageToBytes(MessageSlip msg)
        {
            BinaryFormatter f = new BinaryFormatter();
            using (MemoryStream ms = new MemoryStream())
            {
                using (GZipStream gZip = new GZipStream(ms, CompressionMode.Compress))
                {
                    f.Serialize(gZip, msg);
                }
                byte[] b = ms.ToArray();
                int TotalLength = b.Length;
                int currentPosition = 0;
                int writeLength = bufferSize;
                while (currentPosition < TotalLength)
                {
                    msgBox = new MessageBox();
                    msgBox.CallBackID = msg.CallBackID;
                    if (currentPosition + bufferSize > TotalLength)
                        writeLength = TotalLength - currentPosition;
                    msgBox.MessageBytes = new byte[writeLength];
                    Array.Copy(b, currentPosition, msgBox.MessageBytes, 0, writeLength);
                    msgBox.currentPossition = currentPosition;
                    msgBox.byteLength = TotalLength;
                    currentPosition += writeLength;
                    msgBoxContainer.Add(msgBox);
                }
            }

        }
    }

И класс распаковки:

public class MessageBoxUnpack
    {

        public MessageSlip UnpackMsgBoxList(List<MessageBox> msgBoxList, int _bufferSize)
        {
            MessageSlip msg = new MessageSlip();
            using (MemoryStream ms = new MemoryStream())
            {
                foreach (MessageBox msgBox in msgBoxList)
                {
                    //ms.Position = (int)msgBox.currentPossition;
                    ms.Write(msgBox.MessageBytes, 0, msgBox.MessageBytes.Length);

                }
                int i = (int)ms.Length;
                BinaryFormatter f = new BinaryFormatter();
                //ms.Flush();
                ms.Position = 0;
                //msg = f.Deserialize(ms) as MessageSlip;
                using (GZipStream gZip = new GZipStream(ms, CompressionMode.Decompress))
                {
                    msg = f.Deserialize(gZip) as MessageSlip;
                }

            }
            return msg;
        }
    }

Ошибка, которую я получаю

using (GZipStream gZip = new GZipStream(ms, CompressionMode.Compress))

Можете ли вы объяснить мне, где проблема, как ее исправить, и дайте мне знать, если метод, который я использую для упаковки, распаковки и разделения, подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...