Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 网络流写入/读取与套接字发送/接收?_C#_Sockets_Networkstream - Fatal编程技术网

C# 网络流写入/读取与套接字发送/接收?

C# 网络流写入/读取与套接字发送/接收?,c#,sockets,networkstream,C#,Sockets,Networkstream,哪一个比另一个快?我正在构建一个服务器客户端应用程序,但我不确定哪一个更快。我可以用这两种方式顺利地发送和接收数据,但我需要更快的通信。网络流在内部使用套接字进行操作。您可以通过在中查看它的构造函数来理解 它为您提供了一些方法,您可以使用这些方法轻松地读取/写入流 另一方面,Socket类为您提供了在网络中交换何种数据的更多控制。如果您打算在网络中通过TCP协议交换数据,则使用Socket或NetworkStream传输速度可能不会有任何差异 如果您需要以更快的通信来交换数据,请考虑使用UDP-

哪一个比另一个快?我正在构建一个服务器客户端应用程序,但我不确定哪一个更快。我可以用这两种方式顺利地发送和接收数据,但我需要更快的通信。

网络流在内部使用套接字进行操作。您可以通过在中查看它的构造函数来理解

它为您提供了一些方法,您可以使用这些方法轻松地读取/写入流

另一方面,
Socket
类为您提供了在网络中交换何种数据的更多控制。如果您打算在网络中通过TCP协议交换数据,则使用
Socket
NetworkStream
传输速度可能不会有任何差异


如果您需要以更快的通信来交换数据,请考虑使用UDP-协议使用<代码> Socket 类,但是请记住UDP协议不像TCP那样面向连接,并且不会发生错误检查。因此,您无法确定数据的可靠性以及数据的保证交付。

我认为Socket是一种更基本的实现,因此您的开箱操作更少,但我不知道您是否真的会有那么多问题,取决于您如何使用它,NetworkSteam可能内置了更多优化功能。可能同时运行这两个程序并使用计时器进行一些测试,看看什么对您最合适。网络流稍微慢一些,因为它在TX端接收TCP数据并将其放入流中,而Rx从流中删除。TCP最大传输区块为1500字节。但是网络流将op从使用TCP时需要的块组合中排除。因此,两者的速度非常接近。您可以放心地忽略@jdweng的错误陈述:“网络流从组合块中消除op”。所有
Stream
对象,包括
NetworkStream
,都具有与TCP
Socket
相同的面向流的行为,并且在所有情况下都没有自动“组合块”。无论您使用的是
Socket
还是
NetworkStream
,您的代码都需要准备好接收从1字节到发送但尚未接收的总字节数的任意位置,然后将接收到的字节重新组合成程序所需的任何有用的排列。至于“哪个更快”的问题,您需要知道的一切都在这里:。事实上,计算机本身的运行速度要比网络连接快几个数量级,所以只要你不完全弄糟代码,任何实现都“足够快”。如果您“想要更快的通信”,请获得更快的网络连接。
public NetworkStream (System.Net.Sockets.Socket socket);