主题:用vb写“QQ”
guoyong_cy
[专家分:3050] 发布于 2008-07-13 14:03:00
[img]http://blog.programfan.com/upfile/200811/20081107131451.jpg[/img]
软件下载地址: ftp://download:download@60.217.234.148/pfcsetup.exe (连接不稳定,请复制这个地址,用工具比如迅雷下载)
本人的专业和计算机完全不沾边,只是业余的程序爱好者,学了这么多年的程序,准备再把这个软件写完就去深造我的专业知识了,觉得还是有点可惜的
在编程序的过程中,曾经发现好多有用的东西,在这次编写这个软件的时候又想了起来。如果我觉得对大家有用的东西,我会陆续发到这个帖子里!
这次编写的软件,是我写的第一个网络软件,因为曾经没有网络可以学习编程,一直是一大遗。
初步设想功能类似QQ,取名为PFC(programfan chat),没想到好名字!
以前有点这方面知识,写这个软件前,把网络编程看了半天,还是有好多困难的地方,在实践中才逐渐解决的。最初我想用tcp协议写,但server承受能力有限,后来改用udp,丢包问题还没完全解决,不过已经想到办法。现在因为想实现传大量连续数据(比如文件,声音等), 不可能靠server中转,必须点对点传,内网点对点已经用vb+winsock实现(有一些目前p2p软件没实现的穿墙我也无能为力)!
测试说明:
现在已有的功能:登录,读写信息(都是在服务器上操作的),查找功能(还不全),发彩字消息,传文件(UDP,索取模式,解决丢包问题),远程视频。
下一步实现功能:音频(没时间做了,估计要2个月后了)。
本来视频准备用directshow,但老是出错,没搞出来,我也是第一次写这个,不晓得哪里出问题了,还是用的是vfw,自己做了个camera.dll,整个软件资料比较大,打了包,现在发布出来了,有单机测试的server端和客户端,里面有说明,目前还有很多bug。
如果连不上的话就是server端程序没开!
为了安全,server端有个地址跟踪程序,请不要恶意攻击!
软件下载地址:ftp://download:download@60.217.234.148/pfcsetup.exe (连接不稳定,请复制这个地址,用工具比如迅雷下载)
最后更新于:2008-11-07 13:57:00
回复列表 (共57个回复)
31 楼
guoyong_cy [专家分:3050] 发布于 2008-08-18 19:54:00
你说的就是p2p,只不过各种软件在应用的时候把数据包设计的不同而已,原理一样
看到你说的这个我想起一个问题:
看到网上有很多“怎样取得自己机子公网ip”的问题
其实只要懂得公网ip是怎么来的就很简单了
假设某人一直都生活在成都,从来没了解过外面的世界,那么他也就不可能知道自己到底在四川的哪个位置,更不用说在中国的哪个位置等等。
取ip也一样,在局域网的机子如果不访问外面的网络,或者外面不给信息,那么它就无法知道自己到底在网络的什么位置,所以要知道公网ip,就只有靠公网上的机子来告诉你
目前很多网络都有很多层网关,也就象地域一样,内网机在不同层次网关取到的ip是不同的,就象一个成都人说自己地址的时候,对于绵阳的人,地址是说成都,而对于云南的人,最好说四川成都,而对于美国的人,却最好说中国四川成都,在这里“四川成都”就相当于port,是下一级的路标。道理一样,也就好理解为什么某些的网络在不同的网站上取到的ip不一样,因为这些网站并不在同一种网络内。
32 楼
sciolist [专家分:40] 发布于 2008-08-24 15:37:00
观望态度。。。。。[em9][em9]
33 楼
guoyong_cy [专家分:3050] 发布于 2008-09-14 00:58:00
主体已经大功告成!
完全用udp连接。
客服端之间采用点对点传输模式,并实现内网对内网传输
未处理同nat下和公网client情况
客服端到服务器端丢包问题已经处理。
重复收包问题未处理
点对点丢包问题暂时未作处理
首页有测试工程
[img]http://blog.programfan.com/upfile/200811/20081107131321.jpg[/img]
34 楼
zm1573 [专家分:60] 发布于 2008-09-19 08:49:00
编程爱好者,比我们计算机专业的还深入,真是佩服哦,不过我是刚入门的,我会努力的哈
35 楼
guoyong_cy [专家分:3050] 发布于 2008-09-20 09:59:00
今天遇到个郁闷的事情
我朋友用的艾普网络,网上很多人说它是骗子
我在测试这个软件的时候发现:
艾普网关竟然不支持回环功能(一旦是多层网络,p2p就穿不透),目前主流都是支持的。
局域网地址还是10开头的(网内机子数目很多,一到上网高峰就特慢)
用这个网络的朋友你们自认倒霉吧!
36 楼
guoyong_cy [专家分:3050] 发布于 2008-09-27 10:13:00
索取模式传文件:(用UDP传也不怕丢包的)
这个名称以及编程方法是自己想出来的,猜想正规软件也是这种方式,但不知道这种方式具体该叫什么名称
现在把具体流程说出来,和大家分享一下:
1.根据自己需要,先将A,B两台电脑建立连接
2.A需要发起传输文件请求,A读取文件名称,大小,然后分块(可以对照网络传输速度来分,比如1KB一块)将文件名,文件大小,分块大小传给B,同时消息要作标记(发文件请求标记),可以间断发多次(但A收到B传来的索取消息后终止)
3.B收到发起请求后,创建文件,按照文件大小和分块大小自行分块,并创建一数组(长度和分块多少一致,这里用数组是因为可以实现断点传送或者分块同时传送,如果觉得占用内存太多的话,可以用位操作,或者写到临时文件中)
4.B:timer控制,顺序扫描数组,只要还没有修改数据,则发送索取消息(一次只索取1块)
5.A收到索取文件块消息后,发送该文件块信息(需要作标记)
6.B收到文件块消息后,将数据存入文件,并修改数组中对应数据(以后就不会重复索取了)
7.B发现接收完成,告知A关闭文件
传输完毕!
37 楼
guoyong_cy [专家分:3050] 发布于 2008-10-01 20:03:00
远程视频出来了!
本来打算用directshow做的,结果老是系统崩溃,不晓得哪里出了问题,还是用的vfw做的(目前无驱摄像头会黑屏)。
我把camera主模块建到独立线程里面了,主窗口不会卡,但因为是vb做的,速度偏慢,不过因为主窗口不卡,用户看不出来的,呵呵!
第一次做摄像头的东西,整整花了两天时间,才实现图像采集+图像重现+压缩成jpg+分块传输+jpg图像重现,哎!
不过我发现网上有个叫ezVidC60.ocx和ezVidCap.ocx的控件,看了它的测试效果,卡得要命,根本不能拿来做软件,而且这个测试效果以及我看到的所有vb示例代码都没有涉及到最关键的功能,就是取出视频缓冲中的数据作二次处理,只是看到有delphi,vc的例子,没搞懂是为什么。为了写这个软件,我自己用vb做了个camera.dll,多线程的,效果不错,目前就是在调用程序不正常关闭的时候会把整个系统卡死,功能还比较少,还有点小问题,等完善了发给大家试试。下一步就是音频了,不过最近没时间,估计要两个月后才能动工了。
发个测试图看看:
这是测试camera.dll的
[img]http://blog.programfan.com/upfile/200811/20081107131412.jpg[/img]
这是视频聊天测试,因为只有1个摄像头,有2窗口没图像,上面一个小窗口是自己的视频,下面是对方的视频
[img]http://blog.programfan.com/upfile/200811/20081107131451.jpg[/img]
这是测试多人同时视频的效果,单机测试(除去网络延迟影响),图像是看不出延时的。
[img]http://blog.programfan.com/upfile/200811/2008110713161.jpg[/img]
2008.10.02
38 楼
nmwwf [专家分:20] 发布于 2008-10-03 21:50:00
楼主强呀,我刚学VB,什么时候能达到楼主的水平就心满意足了.
39 楼
davidlin [专家分:10] 发布于 2008-10-06 22:33:00
看不明白....菜鸟一个~~
40 楼
zm1573 [专家分:60] 发布于 2008-10-08 17:56:00
真不错,虽然不是专业的,却有着专业的精神
我来回复