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,这将工作良好吗?我知道套接字通信有发送数据的大小限制
我根本不想定义任何协议,我只是想使用套接字通信,尽管这可能不是最好的方式。
感谢您的回复
我不担心使用套接字的大小限制。根据我的经验,可以从NetworkStream读写任意大小的数据。然而,我担心位图对象的可序列化性。据我所知,这将不会序列化图像数据。
一旦文件大小超过几个MB, BinaryFormatter将真正开始挣扎。您是否考虑使用使用更复杂的序列化技术的开源通信库?
使用networkcomms.net你的发送方法将成为(你只提供RAW对象,它为你做所有的序列化):
NetworkComms.SendObject("DataPacket", ipAddress, port, object);
在接收端,您的代码将是:
NetworkComms.AppendGlobalIncomingPacketHandler<object>("DataPacket", (header, connection, incomingObject) => { object mydat = incomingObject; });
TCPConnection.StartListening();