【问题标题】:Network transfer pauses网络传输暂停
【发布时间】: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% 处暂停。界面不挂。它支持同时文件传输,因此我可以同时传输两个文件,并且传输不会同时暂停。是的,我相信这是线程安全的,因为这发生在我添加该功能之前。
  • 如果您尝试将您在此处发布的代码移动到更简单的应用程序(控制台?),它会在那里暂停吗?我猜它是别的东西,而不是你在这里发布的代码似乎是正确的......
  • 在本地机器上的普通视频播放器中播放视频时是否有暂停?我怀疑您的视频编码器引入了暂停。你的代码看起来不错。

标签: c# sockets


【解决方案1】:

尝试设置

// Sends data immediately upon calling NetworkStream.Write.
tcpClient.NoDelay = true;

发送

var buffer = new byte[ tcpClient.SendBufferSize ];

阅读

var buffer = new byte[ tcpClient.ReceiveBufferSize ];

TcpClient.SendBufferSize 和 TcpClient.ReceiveBufferSize 可能因平台而异。在某些情况下,我将缓冲区设置为 TcpClient 缓冲区大小的一半或两倍。

【讨论】:

  • 我认为这有所改进,但我不确定。停顿是如此随机,所以很难分辨。
【解决方案2】:

不错的视频....您的 _bufferSize 设置为多少?下拉大小,看看它是否会改变行为。当我将尺寸减半时,我的转移不那么粗糙了。玩得开心!

【讨论】:

    【解决方案3】:

    你可以看看发送文件http://msdn.microsoft.com/en-us/library/sx0a40c2.aspx

    它使用内核来避免在内存中复制数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多