做一个文件传输,电信客户端间的传输速度很好,但是网通跟电信节点连接的时候很慢2k/s,不能动的地步,跟来跟去发现不了问题,(推测很可能是网络丢包率奇高的问题。),无论是TCP或者UDP方式都是这个效果。不过QQ的文件传输等却没有这样的障碍,为何?前提是2点之间是单线程,不能用多线程。前人一定有这个问题,或者好的解决方法或者算法等,请不吝赐教!!!或者有其他建议或者推测,请说说,谢谢!
解决方案 »
- mfc中如何只读取txt中的数值部分到一个数组中,跳过字符部分
- PostThreadMessage给线程发消息
- CXXXView中放置了一个CMFCTabCtrl,GetActiveView只能获得CMFCTabCtrl的子窗口,怎样获得CXXXView的指针呢?
- CDHtmlDialog,显示某些网页时,提示脚本错误找不到对象,程序崩溃。。。
- 内存文件读取求教(看了一天帖子,还是没有搞懂 :( )
- 我该怎么办啊?????
- 想学windows编程,推荐几本书把
- 用vc++怎样登陆到远程的SQL Server中的一个数据库啊?
- help
- 求教vc++连接oracle数据库 不通过ODBC
- 图形围绕轴旋转,高手进!!!!!!!!!!!!!
- 请好心人帮忙
-----------------------
话是这么说,但是应该可以解决,很多软件都做的很好,qq他们就能传(不过我想他们是UDP+多线程),但是单线程有问题,肯定是我程序自身的问题。请高手指导!
在双线机房(有电信出口和网通出口)放个服务器。
让电信的客户端连该服务器的电信IP;
网通的客户端连该服务器的网通IP;
该服务器做中转。
就快了。- 千里孤行
许多用户是内网IP,是不能直接传输数据的。
A给B发文件的过程是这样的:
1.A在界面上操作,给用户B发一个文件
2.操作被传到QQ服务器上,服务器验证B的状态,并查出B的IP地址
3.服务器将B的IP地址,端口,状态等信息传给A
4.A根据服务器传回的信息,如果B状态为不在线等等,就在界面上告知A,并提示发送“离线文件”
5.A根据服务器的消息,如果B状态为在线,则直接连接B的IP地址,如果B为公网IP,则立刻连上,此时相当于P2P传输,如果A,B在局域网内,由于直接连接的IP,那速度就相当快。如果在公网上则取决于A的上行带宽和B的下行带宽,还有运营商之间的接口带宽。
6.如果A无法连接B,则A将无法连接的消息传给服务器,服务器给B消息,让B试图反向连接A
7.如果B连接A成功,则执行5的过程,也是P2P传输
8.如果A无法连接B,而且B无法连接A,则说明A,B都处于不同的内网内,都没有公网IP,无法直接连接。服务器则开始协调A和B进行打洞,详细过程见"P2P打洞和NAT穿越"
9.经过第8步,如果打洞成功(取决于A,B所处的网络环境和连接的路由等),则A和B仍然直接传送数据,也是P2P传输。
10.如果A,B打洞不成功,A和B无论如何也不能直连,也就是不能进行P2P传输,这时需要服务器中转数据。
//udp
int buf_size = MAX_SOCKBUF, buf_minsize = MAX_SOCKBUF / 2;
if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0
&& ::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_minsize, sizeof(int)) != 0)
GetSockErrorMsg("setsockopt(sendbuf)");
//tcp
buf_size = MAX_SOCKBUF, buf_minsize = MAX_SOCKBUF / 2;
if (::setsockopt(udp_sd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(int)) != 0
&& ::setsockopt(udp_sd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_minsize, sizeof(int)) != 0)
GetSockErrorMsg("setsockopt(recvbuf)");
那如果是很多用户是南北交互,那岂不是这个服务器要很大流量通过?这样的方案是不是可以否定掉?费用都搞死人。
还是通过这个服务器,做路由或者控制消息的中转?疑问ing.....
要赚钱,先烧钱其实应该没你想想中name严重,你觉得你一个业务出来,会有多少用户?
如果真由那么多用户,那烧更多钱也值。
- 千里孤行
这个问题我N年前为北京用户调试的时候就遇到过
当时,无论我自己写的软件,还是QQ或者标准FTP
传输速度都只有1KB/S
这个电信和网通之间的物理带宽限制导致的
软件是无能为力的
QQ如果能达到高速度
那么它很可能使用了IP判断,然后借助QQ的服务器进行线路中转和优化除非你能优化你的路由,借助第三方双线路进行传输
否则无法解决