Я создал серверную / клиентскую игру в 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))
Можете ли вы объяснить мне, где проблема, как ее исправить, и дайте мне знать, если метод, который я использую для упаковки, распаковки и разделения, подходит.