前面问了几次都没得到答案,希望这次能令我兴奋!
我写了款C/S模式的程序,S充当索引服务器。C即充当文件源服务器又充当客户,一个客户可以同时向几个源请求文件,程序有点象BT这样的P2P软件。
我在内网测试文件传输速度在1M/S左右,在广域网上速度有好有坏,快的话也是1M/S左右,但慢的话收包就时断是续有时甚至一个包也收不到,如果包中的文件块调小的话,相对原先收包率低的主机收包率会有所提高(应该是包越小收包率越高)
我在广域网测试的大部分结果都不好,一般在40K/S,我只希望能达到100K/S以上,尽请前辈们赐教!
我写了款C/S模式的程序,S充当索引服务器。C即充当文件源服务器又充当客户,一个客户可以同时向几个源请求文件,程序有点象BT这样的P2P软件。
我在内网测试文件传输速度在1M/S左右,在广域网上速度有好有坏,快的话也是1M/S左右,但慢的话收包就时断是续有时甚至一个包也收不到,如果包中的文件块调小的话,相对原先收包率低的主机收包率会有所提高(应该是包越小收包率越高)
我在广域网测试的大部分结果都不好,一般在40K/S,我只希望能达到100K/S以上,尽请前辈们赐教!
解决方案 »
- c# wpf 实时曲线图问题
- 保存调用的程序
- 窗体关闭时如何Dispose掉组件里的Timer控件?
- C#中写自己定义的序列化函数
- 怎样在DataGridView中定位一行
- datagridview 下拉框如何有默认值
- 关于写用户注册可以选填的问题,有这方面经验的大哥救命~~~~~
- 研究petshop的一系列问题!
- 調試出現錯誤,問題何在?聽說可以用funtion?怎么用
- 怎样把textbox1.text转化为数值型???
- 谁能送我一套项目文档,用于动手学习,请帮忙!!!
- ====紧急求救====主表和子表,有外键关联,在dataset里同步更新以后,如果刷新数据库,我的一直报错:好像是找不到handle
在客户之间就只使用UdpClient通信(有点想改为Tcp通信,但水平不够)。
究竟是udp还是tcp?包太大了或者太小了都会影响性能,设置在4kb左右比较合适嗯
如果文件600M的话,一个包要是只有4K那要传多久啊,我目前是用50K或者10K,即使是10K一些客户还是收不到包,如果包再小势必影响到传输时间,所以现在不知道该怎么办,望大虾吗帮助……
http://www.linuxforum.net/books/ethernet-howto/Ethernet-HOWTO-4.html
看过了,以现在的网卡性能应该不要考虑这些吧?
在一段时间内请求的包数量基本上是相同的,只是包中文件块大则收包率低、文件块小则收包率就高。
应该不会是数据包相互覆盖的原因。
把包设置得很大对性能提升的作用有限,控制位占不了多少字节,而internet上数据传输的可靠性远不如局域网
所以是不是有点得不偿失了?
如果包太小,相应的包数量就变大,伴随着文件的传输时间就成倍地增加,所以包大了不好、小了也不好(不希望把包大小改为动态的)。
不知BT到底是怎么实现的。
登陆时用UdpClient
后面一些客户与服务器的通信(如刷新用户在线时间)用TcpChannel
上面的服务器是纯服务器(中央索引服务器),不是指客户。
Why?
我在收包时没判断某个包是否收到,但在发送请求时该请求那些包有判断,比如说还没有被请求下载的包或者曾经被请求过但一段时间后还没收到的包。
如果是tcp,根本没必要自己校验数据,tcp协议自己会做这个工作你为什么不先设置为4kb试一下?
这样交流太慢了!
我的QQ:12471944
至少目前我还这个水准啊……
你可以考虑使用多播,利用UDP协议,可以将多播消息发送到一组由D类子网地址标识的系统,具体的你可以看WROX的.Net 网络高级编程第七章的例子
传输文件主要是在客户之间相互进行的,服务器只参与打洞之类的消息转发或应答。
在传输文件过程中相对一个特定的包而言接收方和源是特定的,没必要用转发吧?
还请指教。
TcpChannel应该是netRemote中的东西吧,用这个通讯,相对直接用socket通讯速度肯定慢些,不过很方便,东西容易用了,性能自然慢些哪^_^