我使用二进制序列化对象来读取或写入数据流,如果我们要编写/读取它们,我们必须将“实例类”编译为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 Communication有一个发送数据的大小限制
我根本不想定义任何协议,我只是想使用套接字通信,尽管这可能不是最好的方法.
感谢您的答复.
最佳答案 我不担心使用套接字的大小限制.根据我的经验,可以从NetworkStream读取/写入任意大小.但是我会担心Bitmap对象的可串行性.据我所知,这不会序列化图像数据.