【问题标题】:What is difference with TCPClient: Client.Connected & Client.Client.Connected?TCPClient 有什么区别:Client.Connected 和 Client.Client.Connected?
【发布时间】:2021-01-19 04:01:24
【问题描述】:

如果有一些专业知识的人可以在这里指出不同之处:

Dim tClient as New TCPClient

tClient.Connect(xxx, xxx)

..和:

tClient.Client.Connect(xxx,xxx)

不知道用哪个?

【问题讨论】:

  • TcpClient.Connect() 调用[Socket].Connect()(所以,TcpClient.Client.Connect(),因为Client 是 Socket 对象)经过一些验证,包括创建 Socket 是否为空,验证 IpV6 是否可以使用,如果指定了主机名,则为端点的地址等。 Socket.Connect() 方法完成其余的工作:例如,它检查 isListening 是否为真,如果是则抛出......
  • 您的问题的标题和正文询问的是两件不同的事情。在标题中,您似乎在询问 .Connected 属性,而在正文中,您比较了对 Connect() 方法的两个不同调用。
  • 正如 Jimi 所说,如果您查看 source codeTcpClient.Connect() 会为您完成肮脏的工作(因为 TcpClient 是 Socket 类的包装器),然后 调用.Client.Connect()。如果你想使用后者,你必须自己做所有的脏活;在这种情况下,您不妨直接使用Socket 类。
  • 关于Connected 属性。 TcpClient.Connected 只是 returns .Client.Connected 所以如果你愿意,你可以使用任何一个,但实际上没有理由使用后者。
  • @ 41686d6564:感谢您注意到 OP 在标题中说“已连接”......然后在他的帖子中询问了“连接”。两个完全不同的东西:)

标签: vb.net tcp tcpclient


【解决方案1】:

来自 Microsoft 文档:

https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.client

TcpClient.Client 属性

获取或设置底层 Socket。

换句话说,您通常希望:

Dim tClient as New TCPClient
tClient.Connect(xxx, xxx)

...或者...

Dim tClient As New TcpClient(xxx, xxx)

【讨论】:

  • 这是初始连接到服务器。那么什么时候使用 tClient.Client.Connect?
  • 阅读文档! “TCPClient”是一个(更高级别的)VB.Net 对象。它包装了底层(较低级别的)套接字对象。 TCPClient 对象还公开了一个“Client”属性,它使您可以访问底层的较低级别的套接字对象。如果你需要它。您通常希望对更高级别的对象“TCPClient”进行编码。最佳情况:使用“tClient.Client.Connect”是不正当的,但无害。最坏的情况:它会使包装对象的某些部分未初始化,并且可能会发生坏事。
猜你喜欢
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
  • 2011-11-22
  • 2015-03-26
  • 2013-08-19
相关资源
最近更新 更多