【问题标题】:TCPClient vs Socket in C#C# 中的 TCPClient 与 Socket
【发布时间】:2010-10-15 17:16:22
【问题描述】:

我没有看到TCPClient 有很多用处,但Socket 有很多用处?它们之间的主要区别是什么?您什么时候使用它们?

我知道 .NET Socket 是在 WINSOCK 之上编写的,TCPClientSocket 类的包装器。因此TCPClient 是链条的上游,并且可能效率低下。如果我错了,请纠正我。

【问题讨论】:

    标签: c# .net sockets network-programming


    【解决方案1】:

    使用 TcpClient 和 TcpListener 只是意味着少了几行代码。正如您所说,它只是 Socket 类的包装器,因此它们之间没有性能差异,这纯粹是一种样式选择。

    更新:自从发布此答案后,.Net 源代码已可用。它确实表明 TcpClientSocket 类的一个非常轻量级的包装器,它本身就是原生 WinSock2 API* 之上的包装器。

    • 在 Windows 上。 .Net Standard/Core 等在其他平台上会有所不同。

    【讨论】:

    • “风格”在这里是“常识”的大词。如果您可以使用预制件,请务必这样做:)
    • 这里的注释似乎与此相矛盾。 msdn.microsoft.com/en-us/library/… "如果您正在编写一个相对简单的应用程序并且不需要最高性能,请考虑使用 TcpClient"
    • 没有矛盾。关于更高层次抽象的一般假设是它在底层功能方面不太灵活。因此,如果您需要做一些不符合 TcpClient 模型的事情,您最终可能会扭曲和弯曲其 API,并在此过程中失去可读性和性能。如果您将它用于它的设计用途,但没有内在的理由相信它的性能不如更明确的 API,但您将获得可读性。
    【解决方案2】:

    另外,您可以直接从TCPClient 对象访问套接字,它位于Client 属性下 - 因此没有性能差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多