Прием и обработка с сокетами - PullRequest
0 голосов
/ 17 марта 2019

Задача

Я создаю простой API для отправки и получения объектов через Интернет. Я использую system.net.sockets.

Я получаю эту ошибку от части, которая должна десериализовать данные:

Socket Client в DataProccesser при десериализации сетевых данных Ошибка: System.ArgumentNullException: буфер не может быть нулевым.

Имя параметра: буфер (в переводе с голландского)

Мне кажется, я получил пустой буфер или что-то в этом роде.

Код, в котором происходит ошибка:

ErrorFunction("Socket Data" + ID + " 1", ID); //not important
while (Received.Count < 1) { } //Received is a List<byte[]> which stores all received data.
byte[] buffer = Received[0];
NetworkData data = null;
DataFunctions function = null; //not important
ErrorFunction("Socket Data" + ID + " 1", ID); //not important

try
{
    using (MemoryStream ms = new MemoryStream(buffer)) // here is the error
    {
        data = new BinaryFormatter().Deserialize(ms) as NetworkData;
    }
} catch (Exception e)
{
    ErrorFunction("Socket " + ID + " in DataProccesser while Deserializing networkdata Error: " + e.ToString(), ID);
    Received.RemoveAt(0);
    continue;
}

Код для отправки и получения:

Отправка

byte[] x = send.SerializeNetworkData();  //send.SerializeNetworkData() is a byte[]
socket.Send(BitConverter.GetBytes(x.Length));
socket.Send(x);

Прием

byte[] buffer = new byte[sizeof(int)];
socket.Receive(buffer);
buffer = new byte[BitConverter.ToInt32(buffer, 0)];
buffersize = socket.Receive(buffer);
Received.Add(buffer); //This is a List<byte>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...