.net 何时应首选TcpListener.AcceptSocket而不是TcpListener.AcceptTcpClient?

.net 何时应首选TcpListener.AcceptSocket而不是TcpListener.AcceptTcpClient?,.net,tcp,tcplistener,.net,Tcp,Tcplistener,TLDR TcpListener.AcceptSocket(Async)和TcpListener.AcceptTcpClient(Async)在功能和预期用途上有什么区别?具体来说,NetworkStream是否值得特别注意 全部细节和背景 我正试图掌握.NET套接字功能,以便编写一个服务器,该服务器通过预定义的协议维护与多个客户端的双向通信的持久TCP-IP连接 最初,谷歌让我想到了这个话题,这在关于这个话题的问题中占据了重要地位 深入探究问题和答案,我看到人们建议使用TcpClient/Tc

TLDR

TcpListener.AcceptSocket(Async)
TcpListener.AcceptTcpClient(Async)
在功能和预期用途上有什么区别?具体来说,
NetworkStream
是否值得特别注意

全部细节和背景

我正试图掌握.NET套接字功能,以便编写一个服务器,该服务器通过预定义的协议维护与多个客户端的双向通信的持久TCP-IP连接

最初,谷歌让我想到了这个话题,这在关于这个话题的问题中占据了重要地位

深入探究问题和答案,我看到人们建议使用
TcpClient
/
TcpListener
而不是
Socket

现在
TcpListener
有两种方法(阻塞和异步版本):
AcceptSocket
acceptcpclient
。MS的文档简要说明了后者更简单,前者提供了更多的控制,但没有解释原因和方式。我可以从中看到,后者通过
TcpClient
访问
NetworkStream
,而前者在
Socket
上公开
Send
/
Receive
方法,但这并不能真正解释为什么首选这种方法


那么,有什么区别,人们应该如何选择使用哪一种呢?是否每个用例都是为其设计的?为什么两者都存在?

基本上归结起来就是,
AcceptTcpClient
是一个更具体/专门的函数,它返回更具体的
TcpClient
,而不是更通用的
Socket
(其中
TcpClient
是它的扩展)@gmiley我觉得我的问题已经包含了这个链接的答案。。。这说的很少。“问题-答案”链接没有走得更远。在我看来,
NetworkStream
是一个关键的区别,但到那时我已经迷失了方向。
Socket
是一个比
TcpClient
级别更低的类,提供相同的功能。如果不需要前者,可以使用后者以更少的代码完成同样的工作。这就是它的全部。“如果你不需要前者”-我的问题是为什么/什么时候我需要这个公式如果你需要执行TCP特定的操作,你会使用
TcpClient
,否则没有区别,它只是一个
套接字
。类似地,UDP特定操作也有一个
UdpClient
,尽管它的核心也是一个
Socket