我现在开发一个C#的网络文件传输小软件,用的Socket,tcp。我想问下怎么控制文件传输的速度。

比如说:当地网络最大为2M/s,我可以人为的限制文件传输速度为多少KB/s。谢谢

发送的都是package,一般可能每个package是1K左右。
你可以通过调用同步发送方式,然后自己做个时间计算,2个package之间的时间是多少。

比如,每个package是1k,从上次发送前到现在的时间是5ms。如果现在继续发送的话,那么上个5ms的流量就是1k/0.005s=200k/s。

如果你想限制速度到50k/s,这个时候我们经过计算可以知道,每个package的1k的包,需要20ms。(1000ms/50k/1k=20ms。)那么我们需要sleep(15)等待15ms后再发送。

基于你问题的另外一种理解,你的网络带宽是2M的,那么理论传输速率是2x1024/8=256k/s,如果你只想正常发送的话,中间不需要做任何事情,直接发送,在同步TCP的作用下,每个package都需要发送成功后再返回发送下一个package,那么它会自动使用满整个网络带宽(前提是你和对方的连接足够好,你们之间的连接速率能够达到2M的水平。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-10
可以的。有几种思路:
1、将文件读入到Filestream中,获得Filestream.Length,然后写一个循环,每次发送1KB,直到发送完成。只要文件大小在内存能承受的范围内,就可以这么做。1KB的发送,即使最烂的网络,只要不断就不会丢包。

2、将文件分批次读入到Filestream中,然后发送,然后再读,再发送....理论上,这样可以发送的文件大小没有限制,目前实测读取和发送的大小必须一致,否则会出错;但是如果有高级的调度算法,应该是没问题的,目前还在研究中...本回答被网友采纳
第2个回答  2012-12-10
csdn还cnblogs 或51aspx上面都有 自己找下呗

...用的Socket,tcp。我想问下怎么控制文件传输的速度。
发送的都是package,一般可能每个package是1K左右。你可以通过调用同步发送方式,然后自己做个时间计算,2个package之间的时间是多少。比如,每个package是1k,从上次发送前到现在的时间是5ms。如果现在继续发送的话,那么上个5ms的流量就是1k\/0.005s=200k\/s。如果你想限制速度到50k\/s,这个时候我们经过计...

c#如何在局域网下传输文件夹
用资源共享 ,或者socket 。socket是和底层的操作 。然后用文件流直接可以操作 。数据也肯定没有问题 。

c#聊天室发送文件和接受文件
首先,要看你的框架是什么类型的, 一般聊天室都是点对点的,也有带中转服务器的。如果是带中转的,那么可以做成类似QQ离线发送这种功能。 就是文件发送到服务器,然后接收方下载文件。点对点传输就做成你想要的 接收方需要点击确定按钮进行接收的效果。无论你是UDP、TCP、Socket, 传输文件都是发送包, ...

c#开发的程序中如何控制上行速度?
FileStream inFile = new FileStream("文件路径",FileMode.Open, FileAccess.Read);int speedTime = 10240; \/\/ 10KB 每秒int count = (int)inFile.Length;Stopwatch stopwatch = new Stopwatch();for (int i = speedTime ; i < count; i += speedTime ){ stopwatch.Reset();stopwatch.St...

C# 怎么在广域网之间进行文件传送,TCP UDP的都行
对于你的问题,如果双方都在内网而且不在同一网段,楼上的朋友的办法不能解决实质问题,建议需要借用打洞技术实现通信。打洞基本原理是A B分别在不同的内网,A第一次给B发送数据时会被B的路由器拦截掉的,但是在此之后B若需要给A发送数据,由于之前A希望与B通信(),A的路由器会允许B发送的数据通过...

c# socket文件传输只能在局域网中实现吗
socket通讯不只是在局域网使用,在广域网也能使用,它和具体网络没有关系,只要网络能联通,就能使用,只是广域网中,比较复杂,带宽小时,或网络忙时,不能及时收到数据,要做好延时,或收不到数据的重发处理等问题

C#Socket(tcp)异步批量发送文件问题
从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后没有发现文件错误.测试文件发送到Server和下载的情况基本差不多,这说明了在网络不好的情况处理发送大数据包似首容易产生错误,但看TCP\/IP协议讲解这情况似乎不存在,因为当一个发送数据超过某个值的时候,TCP会划分块进行传输并...

C#和网络通讯:TcpClient、TcpListener和Socket的使用比较
C#网络通讯中,TcpClient、TcpListener和Socket的使用提供了开发者便捷的TCP通信手段。TcpClient和TcpListener作为Socket的封装,简化了网络编程,使得开发者专注于业务逻辑,无需处理底层细节。TcpClient用于客户端连接,而TcpListener则负责监听并管理连接请求。它们提供高级API,适用于常规TCP通信。然而,Socket作为...

C#Socket和TCP连接的区别
网络层层的协议是IP,传输层的协议是TCP。最本质的区别就是,网络层把数据添加到IP地址,IP为所有的系统端口服务,传输层只添加到端口,即操作系统的服务端口。网络层\/输出层提供了面向连接和无连接的服务方式。C#中TcpClient和Socket的应用选择:只考虑:主机,端口,数据传输时,用TcpClient,或UdpClient...

我刚刚学习c#网络编程,自己动手做了个小WINFORM测试下tcplistener 和tc...
有个send方法和receive(不确定是否拼写正确)方法,分别用来发送和接收数据的!!你接收端要一直打开着监听,只要监听到有数据到指定的端口上,就会自动获取下来!!百度一下,网上很多socket通讯介绍资料

相似回答