我有一个服务器应用程序,用于侦听端口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/