c# - 如何等待流写入完成

标签 c# networking networkstream

我有一个服务器应用程序,用于侦听端口8888上的连接。我也在创建客户端应用程序。这是一个简单的应用程序,唯一困难的是管理多个连接。因此,我只需要在计算机之间发送文件,就可以做到这一点,我不知道它是否不错,但是它可能起作用,也许你们可以纠正我。这是我发送文件时的算法:

NetworkStream stream = \\ initialize it

while(someCondition)
{
  // first I open the file for reading and read chunks of it
  byte[] chunk = fileRead(file, indexStart, indexEnd) // I have a similar method this is just to illustate my point

  stream.Write(chunk, \\other params)

   // since I often send large files it will be nice if I can wait here 
   // until the stream.Write is done. when debuging this the while loop 
   // executes several times then it waits. 

}


另一方面,我从该流中读取字节并将其写入文件。

有时我也需要等待,因为我发送了多个文件,并且要确保在发送到下一个文件之前已发送第一个文件。我知道可以在传输完成后使用stream.Read方法解决此问题。并从客户端发送回数据。但是有时我相信知道stream.write何时完成会有所帮助。



编辑

好的,因此根据您的回答,我可以例如向客户端发送我计划发送的字节数。一旦客户端接收到很多字节,就意味着它已经完成。但是我的问题是这是否有效。我的意思是做类似的事情

在服务器上:

写入数据“发送文件长度”

读取数据“检查客户端是否收到长度”(例如,期望字符串正确)

写数据“给客户端的文件名”

读取数据“检查客户端是否获取文件名”

写入数据“开始发送文件块”

读取数据“例如,直到客户端以字符串ok答复”

最佳答案

该行写完时

stream.Write(chunk, \\other params)


完成。值得注意的是,这并不意味着另一端已经收到任何东西。实际上,紧接该行之后,数据很可能位于发送机上的某个缓冲区中。这意味着它现在已无法控制。如果您需要确认收据,则远端必须通知您。

关于c# - 如何等待流写入完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7259247/

相关文章:

c# - 在 ABC 类中有一个集合<ABC> 可以吗?这是好的做法吗?

c# - 为什么我的 log4net appender 没有缓冲?

python - 如何使用 netaddr python 库将网络掩码转换为通配符?

c# - TcpClient 在异步读取期间断开连接

c# - FluentNHibernate 中的 ClassMapping<T>.Property() 等效项

c# - 我的这个 MVC 项目的单元测试代码有什么问题?我不断收到 'does not contain definition' 和 'no extension method error'

linux - 如何从内核模块使用 XPS(传输数据包控制)

java - 将 webapp 从本地主机移动到服务器 - 找不到页面

c# - 如何在网络流中写入一个小间隙?

C# BinaryReader.ReadChar 读取 NetworkStream 时抛出 "System.ArgumentException: The output char buffer is too small"