【问题标题】:The inverse of TcpClient.GetStream - Getting The TcpClient associated with a given NetworkStreamTcpClient.GetStream 的逆 - 获取与给定 NetworkStream 关​​联的 TcpClient
【发布时间】:2013-11-11 04:37:55
【问题描述】:

有什么方法可以实现TcpClient.GetStream() 的逆运算,即获取与给定NetworkStream 关联的TcpClient

如果没有,我还能如何获得可用数据的数量(不要与一般数据的可用性混淆,可以通过NetworkStream.DataAvailable 检索) 在NetworkStream 上?

【问题讨论】:

  • 为什么不自己存储 TcpClient 呢?
  • 网络流是无穷无尽的,所以 Length() 属性没有意义,没有实现。只需读取流,它就会告诉您它返回了多少(可能还有更多等待读取,取决于缓冲区的大小)。将您的逻辑基于收到的实际数据。只有您可以决定“所有”(或足够)数据何时到达以便您采取行动。您可以自行设计一个通信协议,让您可以仅根据您目前收到的数据来确定何时收到“完整消息”。

标签: c# stream tcpclient


【解决方案1】:

没有这样的功能,至少我不知道。 Stream.Length 在网络流上毫无意义,因为您永远不知道剩余的数据量。也就是说,您可能在那里遇到了一个概念上的错误:网络流只是传递数据,无法知道流中还剩下多少数据,因为另一端可以不断地在其上发送数据,理论上是永远的。如果您想知道正在下载的文件的大小,则必须解析网络流的 contents,假设使用的协议确实发送了此类信息。

【讨论】:

  • 好的。我不确定是否有概念错误,因为NetworkStream 在某种意义上是TcpClient 的“接口”,而TcpClient 本身DOES 具有这样的属性。正如@user2674389 所建议的那样,我将只使用它(之前的问题是我只通过了NetworkStream 而不是TcpClient,或两者兼而有之。
  • TcpClient.Available 也只返回缓冲区中当前可用的字节数。它没有提供有关总共可用数据量的任何信息。
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多