Сериализованным данным по tcpclient нужно указать количество?
Я отправил данные в виде байтов, используя TcpClient, и я хотел отправить свой собственный класс вместо байтов данных.
Под байтами данных я имел в виду то, что я посылаю данные, преобразованные в байты, вот так:
using (MemoryStream bufferStream = new MemoryStream())
{
using (BinaryWriter bufferData = new BinaryWriter(bufferStream))
{
// Simple PONG Action
bufferData.Write((byte)10);
}
_logger.Info("Received PING request, Sending PONG");
return bufferStream.ToArray();
}
И вместо этого я хотел бы отправить его так, без необходимости объявлять его размер или ж / д
public class MyCommunicationData
{
public ActionType Action { get; set; }
public Profile User { get; set; }
...
}
Обычно, когда я отправляю свои данные в байтах, первые 5 байтов я использую, чтобы указать действие и размер сообщения.
Но если я перейду на сериализацию всех данных как одного класса, мне все равно нужно будет отправить какое действие и размер, или использовать сериализованные сообщения, клиент и сервер будут знать, что читать и т. Д., Или есть способ сделать это, чтобы я мог это сделать отправить его без необходимости указывать вещи из объекта сериализации?
Не уверен, если это имеет значение здесь, я используюAsyncCallback
для чтения и записи в сетевой поток:
_networkStream = _client.tcpClient.GetStream();
_callbackRead = new AsyncCallback(_OnReadComplete);
_callbackWrite = new AsyncCallback(_OnWriteComplete);
Дайте мне знать, если вы хотите, чтобы я опубликовал какие-либо другие функции.