Метод TcpClient Recive не получает байтовый массив в правильном формате. - PullRequest
0 голосов
/ 14 июня 2019

Я использую Tcp-Ip для отправки объектов.Мое соединение работает правильно для некоторых объектов и не будет работать для других объектов.Метод приема TcpClient не получает байтовый массив в правильном формате для некоторых объектов.

// Запрос TcpClient для сети передачи данных.Send (BitConverter.GetBytes (13));

byte[] Reply = Network.ReciveBytes();

int Size = BitConverter.ToInt32(Reply, 0);

int SizeCountIncrement = 4;

LinkedList<CatogoryTemp> Data = new LinkedList<CatogoryTemp>();

CatogoryTemp Temp = null;

for (int i = 0; i < Size; i++)

{

    Temp = new CatogoryTemp();

    int LocalAction = BitConverter.ToInt32(Reply, SizeCountIncrement);

    SizeCountIncrement += Temp.ToCatogoryTemp(Reply, SizeCountIncrement);

    Data.AddLast(Temp);

}

//Отправка данных TcpListner

LinkedList<CatogoryTemp> DataToSend = db.LoadCatogories();

List<byte> Sender = new List<byte>();

Sender.AddRange(BitConverter.GetBytes(DataToSend.Count));

foreach (CatogoryTemp i in DataToSend)

{

    Sender.AddRange(i.ToByteArray(15));

}

byte[] data = Sender.ToArray();

socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);


private void SendCallBack(IAsyncResult r)

{

    Socket socket = (Socket)r.AsyncState;

    socket.EndSend(r);

}

при отладке массива байтов, отправляющих tcp-listner (Data), имеет начальный байт, имеющий значение 20, так как у меня длина 20, а следующий байт имеет значение 15, но при получении у меня 6 в исходномбайт и некоторые случайные данные, мой байт размером 20 делается на байт 61, даже после того, как эти данные перетасованы.

...