4

我使用二进制序列化对象来读取或写入数据流,以前如果我们要写入/读取它们,我们必须将“实例类”编译为 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,这会很好吗?我知道 Socket 通信对发送数据有大小限制

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

感谢您的答复。

4

2 回答 2

2

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

于 2012-12-30T06:45:00.837 回答
0

The BinaryFormatter will really start to struggle once your file size is above several MB. Have you considered using an open source communication library which uses more sophisticated serialisation techniques?

Using networkcomms.net your send method would become (you just provide the RAW object and it does all of the serialisation for you):

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

On the receive end you code would be:

NetworkComms.AppendGlobalIncomingPacketHandler<object>("DataPacket", (header, connection, incomingObject) => { object mydat = incomingObject; });
TCPConnection.StartListening();
于 2013-01-20T13:23:46.540 回答