Serializowane dane w tcpclient muszą określać kwotę?
Wysłałem dane jako bajt używając TcpClient i chciałem wysłać własną klasę zamiast bajtów danych.
Przez bajty danych miałem na myśli to, że wysyłam dane przekonwertowane na bajty w następujący sposób:
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();
}
Zamiast tego chciałbym wysłać to w ten sposób, bez konieczności deklarowania jego rozmiaru lub w / e
public class MyCommunicationData
{
public ActionType Action { get; set; }
public Profile User { get; set; }
...
}
Zwykle, gdy wysyłam moje dane jako bajty, pierwsze 5 bajtów używam do wskazania akcji i rozmiaru wiadomości.
Ale jeśli przeprowadzę migrację w celu serializacji wszystkich danych jako pojedynczej klasy, czy nadal muszę wysyłać informacje o tym, jaka jest ich akcja i rozmiar lub czy korzystać z serializowanych wiadomości, klient i serwer będą wiedzieć, co czytać itd., Czy też istnieje sposób, aby to zrobić wysłać go bez konieczności określania rzeczy z obiektu serializacji?
Nie jestem pewien, czy to ma znaczenie tutaj, używamAsyncCallback
czytać i zapisywać do strumienia sieciowego:
_networkStream = _client.tcpClient.GetStream();
_callbackRead = new AsyncCallback(_OnReadComplete);
_callbackWrite = new AsyncCallback(_OnWriteComplete);
Daj mi znać, jeśli chcesz, abym opublikował inne funkcje.