Ton*_*Nam 1 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.
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我从该流中读取字节并将其写入文件.
我还需要等待,因为我发送了多个文件,我想确保在移动到下一个文件之前已经发送了第一个文件.我知道我可以通过在传输完成后使用stream.Read方法来解决这个问题.并从客户端发回数据.但有时我相信知道stream.write何时完成将会有所帮助.
编辑
好的,所以根据你的答案我可以例如发送给客户端我计划发送的字节数.一旦客户端收到那么多字节,就意味着它完成了.但我的问题是这是否有效.我的意思是做类似的事情
在服务器上:
写数据"发送文件长度"
读取数据"检查客户端是否收到了长度"(例如,期待字符串确定)
写数据"tel客户端文件的名称"
读取数据"检查客户端是否收到了文件的名称"
写数据"开始发送文件的块"
读取数据"等到客户端回复字符串确定例如"
线路完成后写入完成
stream.Write(chunk, \\other params)
Run Code Online (Sandbox Code Playgroud)
完成.值得注意的是,这并不意味着另一端已收到任何东西.实际上,紧接在该行之后,数据很可能在发送机器的某个缓冲区中.这意味着它现在已经无法控制.如果您想要收据确认,远程端必须让您知道.
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |