繁体   English   中英

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

[英]Data Limitation on send and receive using Binary Formatter (Socket Programming, TCP Client) .net

我正在做一些与C#.net中的套接字编程有关的工作。 因此,如果您要通过套接字发送对象列表(显然以字节为单位),那么接收器将不具有有关列表长度以及应读取多少字节的信息,除非您在发送列表之前先发送有关长度的信息(简单且明显的解决方案)。 但是,如果我使用Binary Formatter,我不必担心大小对吗? 可以使用这种方法发送任意数量的数据吗是否有限制? 限制通过它发送和接收数据。

这是发送数据的一部分

                 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百万个以上的对象,并且可以正常工作。 我应该继续使用吗?

使用NetworkStream时,对大小的技术限制为long.MaxValue。 但是您应该考虑以下几点:

  • 您发送的数据量越大,网络错误的可能性就越高,因此无法获取数据的可能性就越高。 考虑分块发送数据,因此,如果一个块发生故障,您可以轻松地重新发送它。 简而言之,以这种方式发送1Mb是可以的,发送1Gb是一个问题。
  • BinaryFormatter序列化还有其他很大的方面,并且传输的大小显着增加。 在某些情况下(取决于您的实际类和数据),它甚至可能比通过HTTP发送JSON还要多。
  • 如果您需要最大程度地控制自己的工作并进行一些深度优化,则将Sockets选择为一种传输方式是有意义的。 在较简单的情况下,请考虑使用WCF或WebAPI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM