繁体   English   中英

C#,基于套接字通信的二进制序列化

[英]C#, Binary Serialization over Socket Communication

我使用二进制序列化对象读取或写入数据流,以前如果要写入/读取它们,则必须将“实例类”编译为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>();
}

如您所见,有几个列表变量,例如位图和字符串。 位图数据用于图像数据。 如果我用很多图像填充它,则会增加可变内存的大小,可能约为20 mb。

之后,我将把它们发送给整个客户。 好吧,这是我的问题:

使用此技术,如果大小对象约为20 mb,是否可以正常工作? 我知道套接字通信有发送数据的大小限制

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

感谢您的答复。

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

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

使用networkcomms.net,您的send方法将变为(您只提供RAW对象,它会为您完成所有序列化):

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM