c#,套接字通信上的二进制序列化

本文关键字:二进制 序列化 通信 套接字 | 更新日期: 2023-09-27 17:50:09

我使用二进制序列化对象来读取或写入数据流,以前如果我们要写/读它们,我们必须编译"实例类"为DLL文件,所以我们在它们之间有相同的程序集,是对的吗?

现在,我的问题是:

这是我的二进制发送者代码

public void SendBinarySerial(object graph)
{
    IFormatter formatter = new BinaryFormatter();
    System.Net.Sockets.NetworkStream strm = mClient.GetStream(); //get TCPclient stream
    formatter.Serialize(strm, graph);
}

,这是我的二进制接收器代码:

private void doRead()
{
    do 
     {
       if (mClient.GetStream().CanRead) 
          {
             System.Net.Sockets.NetworkStream strm = mClient.GetStream();
              IFormatter formatter = new BinaryFormatter();
              object mydat = (object)formatter.Deserialize(strm);//deserialize data receiver         
           }
    } while (true);
}

这是我的"实例类"代码,我想发送给整个客户端。让我们考虑下面的代码:

[Serializable()]
public class DataSend
{
    public List<Bitmap> MainData = new List<Bitmap>();
    public List<string> Title = new List<string>();
}

如您所见,有几个List变量,如Bitmap和string。位图数据用于图像数据。如果我用许多图像填充它,它将增加可变内存的大小,可能大约20 mb。

之后,我要把它们发给所有的客户。我的问题是:

使用这种技术,如果大小对象是大约20 mb,这将工作良好吗?我知道套接字通信有发送数据的大小限制

我根本不想定义任何协议,我只是想使用套接字通信,尽管这可能不是最好的方式。

感谢您的回复

c#,套接字通信上的二进制序列化

我不担心使用套接字的大小限制。根据我的经验,可以从NetworkStream读写任意大小的数据。然而,我担心位图对象的可序列化性。据我所知,这将不会序列化图像数据。

一旦文件大小超过几个MB, BinaryFormatter将真正开始挣扎。您是否考虑使用使用更复杂的序列化技术的开源通信库?

使用networkcomms.net你的发送方法将成为(你只提供RAW对象,它为你做所有的序列化):

NetworkComms.SendObject("DataPacket", ipAddress, port, object);

在接收端,您的代码将是:

NetworkComms.AppendGlobalIncomingPacketHandler<object>("DataPacket", (header, connection, incomingObject) => { object mydat = incomingObject; });
TCPConnection.StartListening();