最近做视频传输项目,碰到大数据量的传输问题,vb自带的控件效率太低了,因此自己做了一个dll,直接在vb中使用,不需要注册控件,免费。传输测试:
样本:7976kb的数据
VB控件:24kb/s、34kb/s
我的dll:80kb/s、95kb/s明显高于原有的,本来还有一个方案,测试中最高可以达到123kb/s,不过耗费cpu太多最终放弃了。Public Declare Function Sock_Create Lib "PackSock.dll" (ByRef hPackSock As Long) As Long
Public Declare Function Sock_Destroy Lib "PackSock.dll" (ByRef hPackSock As Long) As LongPublic Declare Function Sock_OpenSock Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal hwnd As Long) As Long
Public Declare Function Sock_Listen Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal Port As Long) As Long
Public Declare Function Sock_Accept Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal hAcceptSock As Long) As Long
Public Declare Function Sock_Close Lib "PackSock.dll" (ByVal hPackSock As Long) As Long
Public Declare Function Sock_Connect Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal ServerName As String, ByVal Port As Long) As Long
Public Declare Function Sock_Send Lib "PackSock.dll" (ByVal hPackSock As Long, ByRef lpData As Byte, ByVal DataLen As Long) As Long
Public Declare Function Sock_GetState Lib "PackSock.dll" (ByVal hPackSock As Long) As Long
样本:7976kb的数据
VB控件:24kb/s、34kb/s
我的dll:80kb/s、95kb/s明显高于原有的,本来还有一个方案,测试中最高可以达到123kb/s,不过耗费cpu太多最终放弃了。Public Declare Function Sock_Create Lib "PackSock.dll" (ByRef hPackSock As Long) As Long
Public Declare Function Sock_Destroy Lib "PackSock.dll" (ByRef hPackSock As Long) As LongPublic Declare Function Sock_OpenSock Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal hwnd As Long) As Long
Public Declare Function Sock_Listen Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal Port As Long) As Long
Public Declare Function Sock_Accept Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal hAcceptSock As Long) As Long
Public Declare Function Sock_Close Lib "PackSock.dll" (ByVal hPackSock As Long) As Long
Public Declare Function Sock_Connect Lib "PackSock.dll" (ByVal hPackSock As Long, ByVal ServerName As String, ByVal Port As Long) As Long
Public Declare Function Sock_Send Lib "PackSock.dll" (ByVal hPackSock As Long, ByRef lpData As Byte, ByVal DataLen As Long) As Long
Public Declare Function Sock_GetState Lib "PackSock.dll" (ByVal hPackSock As Long) As Long
[email protected]谢谢楼主
我的dll:80kb/s、95kb/s
=============================
这是不可能的,我将文件拆开来发,在正常的情况下绝不会少于40K,做过这方面的你们应该都心里最明白,(如果你开着BT的话那最多就是一两K)至于你的那个DLL能快一半,我想是用了多线程,我找了一个多线程的例子,正在结合winsock编程,我相信理论上一定能达到80K以上,winsock是网络中最底层的控件,它的意义在于普及性而非效率,而效率我们可以通过代码来改善它
支持楼主的共享精神[email protected]
[email protected]
ftp://zxdvr.vicp.net 下载,
需要最新版本的再跟我联系
OnFileRecived和OnFileSent我在测试的时候屏蔽掉了显示数据的代码,想看到每一帧数据的收发情况的,把相应的屏蔽去掉即可。不好意思啊,各位~
这个DLL我主要是用来传输视频流的,传输一般的文件更加没有问题,请放心好了。
Sock_Destroy
Sock_Listen
Sock_Accept
Sock_Close
Sock_Connect
Sock_Send
Sock_GetState
Sock_GetReceivedDataVB的演示程序也做了改进,直观多了,可以看到当前平均数据速率。
将它改个名字然后在模块中声明调用即可
先谢谢楼主了!我的mail: [email protected]
Dim buf() As Byte
'得到数据
ReDim buf(DataSize) As Byte
Sock_GetReceivedData hPackSockAccept, buf(0), DataSize
(后面的代码作为处理数据用的,省略...)
+ 加入IP地址解析功能,可以直接使用机器名称进行连接
- 去掉了部分接口函数,把他们集成到现有函数中
* 优化接收数据的接口,更加紧凑
! 测试中发现传输率有较大的浮动,实验数据表明,从50-90kb之间浮动,
后面的测试为110-140kb/s
我也在用Winsock开发文件传送的项目
一起研究研究
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
VB是垃圾!!
[email protected] 谢
[email protected]
3x,谢谢楼主了
学习中
[email protected]
1、使用简单,就只有几个函数
2、速度快,达到110-140kb/s,公司多人上网下载东西的时候,仍可以达到80-90kb/s
3、一次发送一次接收,有内部的封包进行处理,对用户是透明的
4、不需要注册控件,当作普通API直接使用就可以
麻烦你也发一份给我, 谢谢!
[email protected]
//VB是垃圾!!我晕,这种矛盾的话都说得出来……
[email protected]
dim rect as rect
dim buf(len(rect)) as byte
copymemery buf(0),rect,len(rect)
Sock_Send hPackSock,buf(0),len(rect)这样就把结构发送出去了enmity(灵感之源) :
其实我之所以用VC,是因为它可以做多线程,vb虽然也可以用一些技巧来实现多线程,但是我觉得没有VC来的稳定,再说了,这个库的目的是提供数据高速传输,用VC来做底层效率相对来说高一些,并且下一个版本我打算将完成端口放进去(因为我做的一个大规模视频主机要用到),用VC也更方便开发,不足之处,请指正。(ps:其实相对而言,VB还是我最常用的工具)
[email protected]
[email protected]
有VB例子吗?
[email protected]
[email protected]
[email protected]
[email protected]谢谢~~~~我有空间,比较稳定,等发给我以后我给你放上去~
[email protected]
[email protected]
多谢搂住啦