网络流存储在哪里

时间:2019-01-21 14:01:35

标签: c# networking tcp

我是编程领域的新手,尤其是在网络世界中 到现在为止,我已经学到了有关tcp,同步和异步编程的一些知识,并且或多或少地了解了事情的进展(我什至编写了一个简单的客户端-服务器程序)  但是仍然有一些我找不到答案的问题。 1.如果我(客户端)写入(到服务器的)网络流,但服务器直到我运行某些命令后才读取该流。这些位会怎样?它们是否存储在服务器端的某个位置,直到被读取? 2.当我用stream.read命令(c#)读取“流”时,我实际上从哪里读取?

最好直接阅读相关的阅读材料 我认为vit还将帮助我了解更多异步编程

谢谢

2 个答案:

答案 0 :(得分:0)

一些与NetworkStream类有关的文档:

https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.networkstream?view=netframework-4.7.2

此外,TCP还可以跟踪发送的数据包,并验证是否已接收到发送的数据包。与UDP相反,在没有验证发送的数据包是否已被接收的情况下。 https://www.howtogeek.com/190014/htg-explains-what-is-the-difference-between-tcp-and-udp/

因此,在这种情况下,取决于它是TCP还是UDP。

另外,在您的情况下,例如FileStream和NetworkStream之间的区别是FileStream使用文件作为一种存储信息的方式(通常在硬盘驱动器上),另一个应用程序可以随时读取该信息, NetworkStream要求同时具有连接的两个应用程序同时处于活动状态,因为通常是通过电缆发送/接收信息。默认情况下,它没有任何持久的存储形式。

编辑:Stream.Read可能是一个侦听端口的阻塞函数,直到它决定停止侦听为止。服务器需要先侦听(使用Stream.Read),然后才能接收信息。 对于TCP,服务器和客户端首先需要完成3次握手,然后才能交换信息。 https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml

答案 1 :(得分:0)

  
      
  1. 如果我(客户端)写入网络流(到服务器),但服务器直到我运行某些命令后才读取该流。这些位会怎样?
  2.   

您写入流中的数据将被传递到OS内核,在那里将对其进行调度并最终通过网络发送。输出队列可能已满,在这种情况下,发送功能可能是等待还是拒绝发送或异步等待-这取决于。

从客户端发送数据并在服务器上接收数据之后,将在服务器操作系统的内核中收集,组装和检查数据。如果一切正常,数据将在输入队列中等待,直到您读取它为止。

  

它们是否存储在服务器端的某个位置,直到被读取?

是的,您的理解是正确的。

  
      
  1. 当我使用stream.read命令(c#)读取“流”时,我实际上从哪里读取?
  2.   

我不了解C#的具体细节,但让我这样摆姿势-在这种抽象级别上,总是从内核读取数据;来自接收计算机的一块内存。该功能可以等待数据出现(可选地,同时允许其他任务运行)。我不希望这里有任何低级的东西。如果您的流阅读器可以缓冲数据或批量提供数据(例如readline方法),我也不会感到惊讶,但是同样,我也不知道C#的具体情况。

相关问题