终于开始动手写自己的东西了
今天完成了第一个DEMO
功能很简单
只是实现多人之间的对话
源代码一及简单的说明在71楼
[url=http://bbs.chinaunix.net/attachment.php?aid=175514]源代码
[ 本帖最后由 net_robber 于 2007-1-2 18:34 编辑 ]
cjaizss 回复于:2006-12-28 14:04:48
否则你觉得怎么弄?
net_robber 回复于:2006-12-28 14:07:01
我不是那么会分析数据包,所以我向问问有没有其他办法
cscscheng 回复于:2006-12-28 14:17:02
openq LZ可以去看看的...
net_robber 回复于:2006-12-28 14:29:38
openq 使用的协议,已经被tencent禁止掉了
我记得半年前起就不能用了
converse 回复于:2006-12-28 14:53:05
不是我打击楼主,我认为:
能做出这个东西的人不会在这里问这样的问题.....
ken1984 回复于:2006-12-28 14:54:21
你可能要花上几个月专门去分析它的协议
net_robber 回复于:2006-12-28 15:28:26
引用:原帖由 converse 于 2006-12-28 14:53 发表
不是我打击楼主,我认为:
能做出这个东西的人不会在这里问这样的问题.....
我现在当然做不出来,这是实话
我想要做这个,主要目的是:借助这个过程,学习相关的知识
不然,每天自己只看书,不做一点实际的东西,怎么验证自己是否真正的学会了呢??
这里重点在学习的过程,请不要误解了,呵呵
以后一定会有不少需要向大家请教的,大家可要照顾我啊!
提前谢谢大家了
book11 回复于:2006-12-28 15:52:06
linux公社有个项目,是kde下用的qq客户端,
lz可以去看看,如果lz能把它移植到gnome环境下就好了。
net_robber 回复于:2006-12-28 16:05:48
引用:原帖由 book11 于 2006-12-28 15:52 发表
linux公社有个项目,是kde下用的qq客户端,
lz可以去看看,如果lz能把它移植到gnome环境下就好了。
谢谢了,
只要是相关的信息,我相信,都是对我有用的
mingyanguo 回复于:2006-12-28 16:16:00
你要仔细麻花腾要跟你打官司.
net_robber 回复于:2006-12-28 16:41:20
????
emacsnw 回复于:2006-12-28 16:49:40
建议不要写qq的客户端,msn或者google talk或者什么都好,呵呵。腾讯很小气的,小心被告 -_-
assiss 回复于:2006-12-28 16:49:43
gaim2。0版已经实现了一个简单的QQ协议。
可以参考一下代码。
cugb_cat 回复于:2006-12-28 17:09:57
如果只是练练的话,建议写个ipmsg的Linux客户端。协议是公开的。
net_robber 回复于:2006-12-28 18:08:01
MSN和GTalk协议是公开的么??
langue 回复于:2006-12-28 18:15:54
光明正大地做,我认为是不可能的,如果影响面大了,腾讯一定要出面干预。
所以只能自己做。抓包,分析,然后写代码,试验。
除非是在实现公开的比如 HTTP,DNS,X 这样的协议。
MSN 的协议,微软早就推出了标准。Google Talk(很多人叫它 Gtalk,我认为非标准),实际是 Jabber。
jeffwang8001 回复于:2006-12-28 18:51:18
敬佩一下楼主先
net_robber 回复于:2006-12-28 20:30:31
做这样一个东西,如果做下来,应该能学到不少东西
很多以前都只是理论上的东西,可以真正拿来实践一下。
就像分析数据报这种工作,几年以前,就在理论上知道了是怎么做,可是,从来没有做过
也许,现在真的有必要认真研究一下了。
就算是为了自己能够多一项技能,以后可以混得好一些
langue 回复于:2006-12-28 20:31:52
引用:原帖由 net_robber 于 2006-12-28 20:30 发表
做这样一个东西,如果做下来,应该能学到不少东西
很多以前都只是理论上的东西,可以真正拿来实践一下。
就像分析数据报这种工作,几年以前,就在理论上知道了是怎么做,可是,从来没有做过
也许,现在真的有必要认真研究一下了。
就算是为了自己能够多一项技能,以后可以混得好一些
好了,说清楚这些,我认为有必要支持一下 :)
net_robber 回复于:2006-12-28 20:33:26
其实关于要做的东西,我还是有很多设想的。
上面说的那个,只是第一步,在那个东西的基础上,还有很多工作要做。
我肯定不会只帮别人做个客户端。
我想做自己的东西。
这只是开始
langue 回复于:2006-12-28 20:37:23
引用:原帖由 net_robber 于 2006-12-28 20:33 发表
其实关于要做的东西,我还是有很多设想的。
上面说的那个,只是第一步,在那个东西的基础上,还有很多工作要做。
我肯定不会只帮别人做个客户端。
我想做自己的东西。
这只是开始
我觉得既然是做 IM,可以不考虑采用 Tencent/QQ 的标准 :)
可以自己来个独创。说不准,你的这个协议,会成为几年以后因特网上 IM 的又一公开标准,造福后代 :em02:
QQ 的东西,分析起来会很困难。可以模仿现成的 MSN 协议,自己订一套标准吧。
net_robber 回复于:2006-12-28 20:53:18
我的计划是这样的:
我想甩掉诸如tencent、MSN等等这样传统的即时通讯服务器
但是第一步,我必须能够通讯。
这个软件,今天起,我已经开始写Makefile和定义、划分一些基本的功能模块了
以后有可能的话,我想在开源社区申请一个项目
当然,如果做得够大,我很有可能辞掉当前的工作
这是自从听说open source之后,我一直得梦想
langue 回复于:2006-12-28 21:00:50
:)
开源项目的资金来源,至少有这样三种:
1、基金会。使用这种模式的项目,一般具有很高的社区声望。比如 Mozilla。
2、商业。商业化后,一些涉及知识产权的代码,不得不闭源,作为商业机密;但那是对商业用户的,对普通用户,可以在一定限制的框架中开放源代码。这样的项目,比如 matrixSSL。商业利润支持着这类项目的开发。
3、个人收入。一般这样的项目是由个人或者小群体发起的,个人在工作之余的闲暇时光,编写代码,发布。这样的项目更是多如牛毛。
我觉得就现状而言,第三种的成分会多一些。
祝 net_robber 写出一套好的即时通讯标准,及其标准实现代码 :)
目前需要做的,是初步规划,以及协议的起草。
net_robber 回复于:2006-12-28 21:11:59
就是说,我现在不用急着做,先设计,对么??
是不是我犯了以前听说过的,软件工程中提到的,没有设计好就开始code 的错误??
我该怎么做??
我现在是一边写计划,或者说设想,大概也能叫做需求
同时写另一文档,描述程序运行起来的样子,也许可以算是以后用于测试的 测试用例
同时划分模块、定义借口。
按照功能划分文件,然后写Makefile
现在我做 的就是这些
我没有参与过项目的设计,不知道该怎样把握。
jeffwang8001 回复于:2006-12-28 21:13:58
看来楼主是认真的,如果需要的话,我可以贡献一份力量
但是只能是业余时间的,辞职暂时还不敢
net_robber 回复于:2006-12-28 21:15:34
引用:原帖由 jeffwang8001 于 2006-12-28 21:13 发表
看来楼主是认真的,如果需要的话,我可以贡献一份力量
但是只能是业余时间的,辞职暂时还不敢
吃饱了才能发展共产主义,呵呵
langue 回复于:2006-12-28 21:21:36
引用:原帖由 net_robber 于 2006-12-28 21:11 发表
就是说,我现在不用急着做,先设计,对么??
是不是我犯了以前听说过的,软件工程中提到的,没有设计好就开始code 的错误??
我该怎么做??
我现在是一边写计划,或者说设想,大概也能叫做需求
同时写另一文档,描述程序运行起来的样子,也许可以算是以后用于测试的 测试用例
同时划分模块、定义借口。
按照功能划分文件,然后写Makefile
现在我做 的就是这些
我没有参与过项目的设计,不知道该怎样把握。
先规划好,后续工作就会变得轻松 :)
你可以试着把标准先制定出来,后面写代码的时候好有个参照。动手就写,不少大师都这样。如果确定自己不是大师级人物,可以慢慢来嘛。不过我不清楚你是否是大师 :em06:
参考一下诸多 RFC,看看别人是怎么写标准的 :)
net_robber 回复于:2006-12-28 21:24:56
谢谢。有结果后,我会告诉大家的。
关于这个软件,我先设计个雏形,然后再拿来给大家提意见
最后公布一个好消息:
一个关系不做得朋友,做语音的,打算帮我设计语音部分
我运气不错,呵呵
langue 回复于:2006-12-28 21:26:48
引用:原帖由 net_robber 于 2006-12-28 21:24 发表
谢谢。有结果后,我会告诉大家的。
关于这个软件,我先设计个雏形,然后再拿来给大家提意见
最后公布一个好消息:
一个关系不做得朋友,做语音的,打算帮我设计语音部分
我运气不错,呵呵
不用谢。
好,祝福 :D
puvttd 回复于:2006-12-28 21:52:48
lumaQQ就是开源的啊.
http://lumaqq.linuxsir.org/
LumaQQ 是什么?
LumaQQ 是一个独立的 Java QQ 客户端,具有可重用的纯Java核心和基于SWT的仿 QQ 界面。我们遵循GNU General Public License 许可证(简称GPL)发布。该条款的原文可见和 LumaQQ 源代码一同发布的 COPYING 文件。
需要特别声明的是 LumaQQ 是以研究和学习为目的的,我们并没有违反 QQ 的版权许可的东西。一切的协议分析都是把 QQ 当作黑箱分析,我们所做的一切都遵循中华人民共和国《计算机软件保护条例》。
tyc611 回复于:2006-12-28 22:53:50
先崇拜一下LZ先:em15:
nully 回复于:2006-12-28 23:14:05
目前开源qq客户端有五个:
lumaqq - java编写,吃资源大户,luma组织越来越侧重于windows端使用者
eva - c++/qt,稳定性较差
cyclone - c/gtk+,功能严重缺陷
openq - gaim插件,好像已成为历史?
gaim-qq - gaim2.0 标配,功能不完善,稳定性差
linux下的QQ客户端实际上都缺胳膊少腿,发文件,图片,个性签名这些垃圾功能没有的话也无所谓,最烦的便是稳定性问题,隔三差五崩一下,特别是好友名单多,太久没上 收到信息多的情况下,没有一个客户端能应付。
当然这与协议不开放有关。
如果有人领头开发这东西,当然要顶,不过想跟得上TX变协议的脚步,还是有困难的。
nully 回复于:2006-12-28 23:15:30
以上纯属个人意见,勿咒。
benjiam 回复于:2006-12-29 09:27:33
打击一下lz 有时间在这里问这个问题。 老早开始分析协议了。
我1年前就反向模拟出msn 的服务器端了。
susesuse 回复于:2006-12-29 10:03:30
建议先考虑好通讯协议,然后考虑server端的开发,然后再是客户端,客户端的开发思路比较简单。
推荐去看看irc协议和几种主流irc server的实现。
mezilla 回复于:2006-12-29 10:15:13
引用:原帖由 converse 于 2006-12-28 14:53 发表
不是我打击楼主,我认为:
能做出这个东西的人不会在这里问这样的问题.....
不赞成!
送给楼主:
[size=3]
在你立足处深挖下去,
就会有泉水涌出!
别管蒙昧者们叫嚷:
“下面永远是地域!”
----尼采
[/size]
Mine 回复于:2006-12-29 11:06:24
引用:原帖由 nully 于 2006-12-28 23:14 发表
目前开源qq客户端有五个:
lumaqq - java编写,吃资源大户,luma组织越来越侧重于windows端使用者
eva - c++/qt,稳定性较差
cyclone - c/gtk+,功能严重缺陷
openq - gaim插件,好像已成为历史?
gaim-qq - ...
为什么要做别人的客户端呢?把时间浪费在协议分析上不可惜么?
有时间有干劲,就做个自己的东西练练。
guotie 回复于:2006-12-29 11:27:30
不赞成重写。
不如写jabber。
醉卧水云间 回复于:2006-12-29 11:44:38
做QQ协议极其无趣,协议控制在别人手里,做也白做。
safedead 回复于:2006-12-29 11:50:02
严重同意
不要做QQ
建议楼主这样做
先设计通信协议
再设计客户-服务器结构
设计一个好协议, 吸引众多热爱即时通信编程的人广泛参与
net_robber 回复于:2006-12-29 11:56:59
问一下关于协议的问题
这里只的应该是七层的协议吧???
susesuse 回复于:2006-12-29 13:26:20
引用:原帖由 net_robber 于 2006-12-29 11:56 发表
问一下关于协议的问题
这里只的应该是七层的协议吧???
不是指这个。你可以看看irc协议(Internet Relay Chat Protocol),网上下载一下rfc1459看看。
panpass 回复于:2006-12-29 13:29:52
厉害
feasword 回复于:2006-12-29 14:21:59
支持lz
真要是做起来了,很想参与一下
net_robber 回复于:2006-12-29 14:48:28
引用:原帖由 susesuse 于 2006-12-29 13:26 发表
不是指这个。你可以看看irc协议(Internet Relay Chat Protocol),网上下载一下rfc1459看看。
正在看,谢谢
baif 回复于:2006-12-29 15:42:10
EVA for KDE.
langue 回复于:2006-12-29 15:59:12
引用:原帖由 Mine 于 2006-12-29 11:06 发表
为什么要做别人的客户端呢?把时间浪费在协议分析上不可惜么?
有时间有干劲,就做个自己的东西练练。
:em06: 你大概误解了 nully 的意思。
susesuse 回复于:2006-12-29 16:01:36
引用:原帖由 langue 于 2006-12-29 15:59 发表
:em06: 你大概误解了 nully 的意思。
langue是mm?要当版主了啊,强啊:D
gnap 回复于:2006-12-29 16:09:09
有点看不下去了。虽说如果从学习的角度,最有学习价值的,最简单的都不是做QQ客户端,但是也不要否定正在从事这些工作和想要从事这些工作的人。
LumaQQ是java写的,我不了解,不做评论。
OpenQ继承于最早开始兼容QQ协议的libqq插件,但是代码太过依赖于Gaim,熟悉它的代码还要如何为Gaim开发插件。而且代码中很多的数据结构的容器来自于glib,你还得熟悉glib的开发。
如果读EVA的代码的话,你还得了解如何开发QT程序。EVA作者功力深厚,其中libeva中对分析出来腾讯协议的数据报文的定义是最直观的,你可以直接从类继承关系中推出报文的层次。适合用来对协议本身的了解。但是EVA的网络套接字调用依赖于QT,不了解的话是个障碍。
cycloneQQ的libcyclone是依赖最少的,代码也比较短小,1万行左右,数据包的构造是使用填充的方法,适合用来了解同类软件的开发思路。
附件是我前不久checkout出来的cylconeQQ代码中的libcyclone部分。解压缩之后是一个lib文件夹。
lib-cyclone.tar.bz2
gnap 回复于:2006-12-29 16:17:24
另外,如果真的想重写的话,建议还是重写OpenQ吧!
OpenQ现在已经并如了GAIM项目,代码不知道,功能上已经尽量符合GAIM的规范。
对比一下GAIM里面ICQ协议的oscar实现,OpenQ的代码的确非常需要重构。
建议你重构时参照oscar,不要参照MSN插件。
xhl 回复于:2006-12-29 17:55:06
建议楼住先把QQ的网络结构弄清楚,这样对你分析网络协议十分有用。
做这种东西要把层次分的很清楚,UI, UA.....
楼主出与练习的目的,可以先用一写抓包工具分析协议,然后在首先要做一个比较稳定的QQ 协议栈,
然后在根据他的具体应用层逻辑,写UA,然后在根据自己写UI的能力,实现一个合适的UI。
这些工作往往不是一个人的力量能做的到的。没什么技术含量。。都是苦工。
happy_number 回复于:2006-12-29 18:10:05
不是我打击楼主,我认为:
能做出这个东西的人不会在这里问这样的问题.....
同意
langue 回复于:2006-12-29 18:19:56
引用:原帖由 happy_number 于 2006-12-29 18:10 发表
不是我打击楼主,我认为:
能做出这个东西的人不会在这里问这样的问题.....
同意
别人有个人见解,跟风就不好啦。:em06:
net_robber 回复于:2006-12-29 20:21:03
引用:原帖由 gnap 于 2006-12-29 16:09 发表
有点看不下去了。虽说如果从学习的角度,最有学习价值的,最简单的都不是做QQ客户端,但是也不要否定正在从事这些工作和想要从事这些工作的人。
LumaQQ是java写的,我不了解,不做评论。
OpenQ继承于最早开始 ...
谢谢!
net_robber 回复于:2006-12-29 20:27:03
我要设计的最终目标是进行点到点的通信。
我最终想做的东西不是别人的客户端。
要不要和QQ服务器通信,这个只是尽量做,因为我分析数据包的能力应该不强(至今没有做过相关的事)。
对我来说,自己设计协议,可能相对容易些。
当然,QQ还是有不少地方可以借鉴的
还有BT、电驴等P2P的软件,都很值得借鉴
feeling00 回复于:2006-12-29 20:55:15
祝福,希望以后能用到你旗下的通讯产品:)
james.liu 回复于:2006-12-29 21:49:00
lz做把,,我也支持你。虽然从你言语中看出你还比较稚嫩,但是相信做这个会让你有很多收获。
benlan 回复于:2006-12-29 22:33:54
我认为LZ做不出来,到时侯做成半吊子丢了,什么都学不到(项目做一半丢了,其实是学不到什么做项目的经验的)
单纯从学习角度来说
还不如找去找个jabber 的 client(如psi等),在他基础把他做的很完美,比如做个一个类msn分格的jabber的client,如linq。现在jabber已经是开源的im标准了,如果要和qq互通,不如做个很漂亮的jabber client(个人觉得linux没有什么非常好的jabber client),然后在jabberd的serv上做个xmpp<-->qq的jabberd 插件,这样子在服务器端完成和qq的互通,也是造福所有的jabber client,这样子gtalk都可以通过xmpp,<--->qq的插件互通qq :)
[ 本帖最后由 benlan 于 2006-12-29 22:35 编辑 ]
mjdcl 回复于:2006-12-29 22:35:13
小建议,楼主还是先熟悉下软件工程
gnap 回复于:2006-12-29 22:50:36
事实上我也觉得做jabber收获会更多。不过LZ选择QQ自然有他自己的理由。
尤其是,程序员在学习阶段,应当尽最大的努力用技术去改善自己的环境。
因为连自己的环境都改善不了,将来怎么会有能力去改善别人的环境?
如果本着改善自己的目的出发,选择QQ是理所当然的。而且LZ用不着从零开始,现在有大量的资料和代码可以参照。在别人的基础上开发也是可行的。
支持LZ,加油吧!
converse 回复于:2006-12-29 23:11:21
引用:原帖由 benlan 于 2006-12-29 22:33 发表
我认为LZ做不出来,到时侯做成半吊子丢了,什么都学不到(项目做一半丢了,其实是学不到什么做项目的经验的)
单纯从学习角度来说
还不如找去找个jabber 的 client(如psi等),在他基础把他做的很完美,比如做个 ...
基本上,我之所以在前面说出打击楼主的话是基于以下的原因:
第一:楼主的功力还不够
第二:楼主定的目标太高,现在任何的第三方QQ客户端都没有完全的兼容QQ的协议,即使做出来也很难赶上QQ协议的变化。
在底子不好的时候还是先找一些现实可行的东西做吧。
要想学习抓包分析协议很简单啊,找一个已经公开协议的协议,自己抓包来看看看自己最后的分析结果是不是可以符合那个协议,等等的,其实有很多“简单且可行”的东西可以做的。
个人认为,看优秀的开源代码是提高功力的捷径,几乎赶得上看好几本好书的了。所以前面别人提出的基于别的开源代码自己定一个目标进行“二次开发”也是不错的选择。
| 回复于:2006-12-29 23:45:45
没劲有这聊天功夫还不如找找资料复习复习再下手
别搞得udp都不知道是什么就放出话来那样只会浪费时间
说真的我也想写不过现在在学习中^_^
[ 本帖最后由 | 于 2006-12-29 23:48 编辑 ]
gnap 回复于:2006-12-30 02:19:32
我觉得1万行的C++代码读起来很容易,又不是啥算法,网络本身也没有复杂的拓扑结构。
[ 本帖最后由 gnap 于 2006-12-30 07:15 编辑 ]
x.jc 回复于:2006-12-30 09:45:54
有胆量,支持一下先!
neverless 回复于:2006-12-30 19:46:18
QQ为什么不实现个其他系统的 客户端呢?
rock_jq 回复于:2006-12-30 22:10:13
有腾讯的吗?出来说两句啊 呵呵
Jarod 回复于:2006-12-30 23:24:39
这种认真的学习态度就让我很敬佩了,
mingyanguo 回复于:2006-12-31 08:54:47
引用:原帖由 neverless 于 2006-12-30 19:46 发表
QQ为什么不实现个其他系统的 客户端呢?
你应该问藤旬为什么要状告给其他系统写客户端的人。
net_robber 回复于:2007-01-02 17:17:39
今天,第一个Demo制作完毕。
软件环境:
Window XP
MinGW-3.1.0-1
MSYS-1.0.10
编译:
make release
使用:
-add X.X.X.X 或 -add host 添加通话用户
-list 列出当前已连接用户(socket号)
-sendto **** 使用某socket通信(此处参数为上面列出的socket号)
-del ******* 终止某socket通信(此处参数为上面列出的socket号)
-who 察看当前正在通信的socket号
net_robber 回复于:2007-01-02 17:18:20
刚才忘了上传源代码了
这里补上:
LanTalk2007010202.tar.gz
benjiam 回复于:2007-01-04 14:29:19
。。。。
看了代码。新手代码。
路还很长。
你慢慢努力吧。
net_robber 回复于:2007-01-04 14:58:45
是要努力,差的多呢!!!
路漫漫其修远兮!!
可惜不做相关的工作,进步的很慢!!
找一个自己喜欢的工作真难!!!!!
gonghai78 回复于:2007-01-05 15:49:47
加油!!继续完善!!
cscscheng 回复于:2007-01-09 14:38:04
??LZ写的是QQ客户端???感觉不象哦...
openq至少正常的发送消息现在还是可以的啊...不过群协议.还有图片.自定义表情.等功能不支持.(听说群有补丁)
fydream 回复于:2007-01-10 17:41:04
win代码?
net_robber 回复于:2007-01-10 18:57:56
是的,手上当前没有Linux可以用
bitmilong 回复于:2007-01-10 20:34:20
简单看了下,感觉确实有点初级,但毕竟是已经上路了,比那些写专业代码天天只嚎叫不动手的人已经领先了很多
支持下LZ,并深切地建议能继续下去,"星星之火,可以燎原"
当年盖次兄也是从这里起步的,坚持下去就会有新的发现
当你程序大一些的时候回过头来看看现在的成果,也许,你会重写,但收获将是你在别处无法得到的
Soff的珊瑚虫最初也是抱着一种想法开始玩的
使劲写吧,趁现在年轻,有时间...
瞬间思路 回复于:2007-06-06 17:56:46
不知道这个项目现在进展如何了?
net_robber 回复于:2007-06-06 22:13:58
在做其他相关的东西,呵呵,称不上项目,顶多是个demo
wuxiangzhi 回复于:2007-06-06 22:17:49
呵呵,加油。毕业设计就做了这个。vc++, c, oracle做的。糊弄老师用的。
|