我使用二进制序列化对象来读取或写入数据流,以前如果我们要写/读它们,我们必须编译“实例类”为DLL文件,所以我们有他们之间是同样的组合,对吗?C#,通过Socket通信的二进制序列化
现在好了,这里是我的问题:
这是我的二进制发送方码
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);
}
这是我“实例类“我想要发送给整个客户端的代码。 OK让我们考虑下面的代码:
[Serializable()]
public class DataSend
{
public List<Bitmap> MainData = new List<Bitmap>();
public List<string> Title = new List<string>();
}
正如你所看到的,有几个列表变量如Bitmap和字符串。 位图数据用于图像数据。如果我用很多图片填充它,它会增加可变内存的大小,大概是20 MB。
之后,我即将把它们发送给整个客户。那么,这是我的问题:
使用这种技术,如果大小对象大约20 MB,这将工作好吗?我知道Socket通信有发送数据的大小限制
我不想定义任何协议,我只是想使用套接字通信,尽管也许这不是最好的方法。
感谢您的回复。
抛弃'CanRead'检查,因为它不会做任何事情,并导致100%的CPU燃烧,如果虚假...你的代码看起来不错。 – usr