Задача
Я создаю простой 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>