【发布时间】:2010-02-23 07:29:33
【问题描述】:
我在 C# 中创建了一个服务器和一个客户端来传输文件。但是在传输时它会暂停几秒钟然后继续。我在 YouTube 上上传了一个视频来演示:http://www.youtube.com/watch?v=GGRKRW6ihLo
正如您所见,它有时会暂停,然后继续。
接收者:
using (var writer = new StreamWriter(Path.Combine(_localPath, file.FileName))) {
var buffer = new byte[_bufferSize];
while (file.Transferred < file.Size && _active) {
int read = ns.Read(buffer, 0, _bufferSize);
writer.BaseStream.Write(buffer, 0, read);
file.Transferred += read;
}
writer.Close();
}
发件人:
using (var reader = new StreamReader(file.FilePath)) {
var buffer = new byte[_bufferSize];
while (file.Transferred < file.Size && _active) {
int read = reader.BaseStream.Read(buffer, 0, _bufferSize);
ns.Write(buffer, 0, read);
file.Transferred += read;
}
reader.Close();
}
【问题讨论】:
-
视频+1 :-)
-
多一点信息会更好,是 tcp 连接还是 udp?它只是通过连接发送原始文件还是那里有一些协议?我没有在视频中看到暂停什么偏移量?可能是GC在暂停时启动吗?接口挂起还是只有正在写入数据的线程?当您访问传输的百分比时,这是否已完成线程安全?
-
TcpClient 和 TcpListener。我有一个协议。例如,它在 6.2% 和 24.03% 处暂停。界面不挂。它支持同时文件传输,因此我可以同时传输两个文件,并且传输不会同时暂停。是的,我相信这是线程安全的,因为这发生在我添加该功能之前。
-
如果您尝试将您在此处发布的代码移动到更简单的应用程序(控制台?),它会在那里暂停吗?我猜它是别的东西,而不是你在这里发布的代码似乎是正确的......
-
在本地机器上的普通视频播放器中播放视频时是否有暂停?我怀疑您的视频编码器引入了暂停。你的代码看起来不错。