回 帖 发 新 帖 刷新版面

主题:用vb写“QQ”

[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  (连接不稳定,请复制这个地址,用工具比如迅雷下载)

回复列表 (共57个回复)

31 楼

你说的就是p2p,只不过各种软件在应用的时候把数据包设计的不同而已,原理一样
看到你说的这个我想起一个问题:

看到网上有很多“怎样取得自己机子公网ip”的问题
其实只要懂得公网ip是怎么来的就很简单了
假设某人一直都生活在成都,从来没了解过外面的世界,那么他也就不可能知道自己到底在四川的哪个位置,更不用说在中国的哪个位置等等。
取ip也一样,在局域网的机子如果不访问外面的网络,或者外面不给信息,那么它就无法知道自己到底在网络的什么位置,所以要知道公网ip,就只有靠公网上的机子来告诉你
目前很多网络都有很多层网关,也就象地域一样,内网机在不同层次网关取到的ip是不同的,就象一个成都人说自己地址的时候,对于绵阳的人,地址是说成都,而对于云南的人,最好说四川成都,而对于美国的人,却最好说中国四川成都,在这里“四川成都”就相当于port,是下一级的路标。道理一样,也就好理解为什么某些的网络在不同的网站上取到的ip不一样,因为这些网站并不在同一种网络内。

32 楼


观望态度。。。。。[em9][em9]

33 楼

主体已经大功告成!
完全用udp连接。
客服端之间采用点对点传输模式,并实现内网对内网传输
未处理同nat下和公网client情况
客服端到服务器端丢包问题已经处理。
重复收包问题未处理
点对点丢包问题暂时未作处理

首页有测试工程
[img]http://blog.programfan.com/upfile/200811/20081107131321.jpg[/img]

34 楼

编程爱好者,比我们计算机专业的还深入,真是佩服哦,不过我是刚入门的,我会努力的哈

35 楼

今天遇到个郁闷的事情
我朋友用的艾普网络,网上很多人说它是骗子
我在测试这个软件的时候发现:
艾普网关竟然不支持回环功能(一旦是多层网络,p2p就穿不透),目前主流都是支持的。
局域网地址还是10开头的(网内机子数目很多,一到上网高峰就特慢)
用这个网络的朋友你们自认倒霉吧!

36 楼

索取模式传文件:(用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 楼

远程视频出来了!
本来打算用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 楼

楼主强呀,我刚学VB,什么时候能达到楼主的水平就心满意足了.

39 楼

看不明白....菜鸟一个~~

40 楼

真不错,虽然不是专业的,却有着专业的精神

我来回复

您尚未登录,请登录后再回复。点此登录或注册