使用二进制格式化程序(套接字编程,TCP客户端).net进行发送和接收的数据限制

时间:2016-04-19 10:27:14

标签: c# .net sockets socket.io

我正在做一些与C#.net中的套接字编程相关的工作。因此,如果你想通过套接字发送对象列表(显然是以字节为单位),那么接收者没有关于List长度和它应该读取多少字节的信息,除非你在发送List之前发送有关长度的信息(简单和明显的解决方案) 但是如果我使用二进制格式化器,我不必担心大小对吗?我可以使用这种方法发送尽可能多的数据,是否有任何限制?限制通过此发送和接收数据。

这是发送数据的一部分

                 TcpClient client = new System.Net.Sockets.TcpClient(serverip, serverport);
               NetworkStream ns = client.GetStream();
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ns, List<Object>);

这是用于接收数据..

               List<Object> list=(List<Object>)formatter.Deserialize(ns);

仅供参考:我已经测试了2千多万个对象,它的工作正常。 我应该继续使用吗?

1 个答案:

答案 0 :(得分:0)

当您使用NetworkStream时,对大小的技术限制是long.MaxValue。 但你应该考虑几件事:

  • 您发送的数据量越大,网络错误的概率就越高,因此无法获取数据。考虑以某些块发送数据,因此如果一个块失败,您可以轻松地重新发送它。总之,以这种方式发送1Mb是好的,发送1Gb是个问题。
  • BinaryFormatter序列化有一些很大的优势,并且显着增加了传输大小。在某些情况下(取决于您的实际类和数据),它可能比通过http发送JSON更多。
  • 如果您需要对所做的事情进行最大程度的控制并进行深度优化,那么选择套接字作为传输是有意义的。在更简单的情况下,请考虑使用WCF或WebAPI。