第一,我们对这个新的中间的插件的期望的实现形式是,比如说本地用的是msn协议,然后按下发送键之后,客户端会试图调用底层函数构造一个msn协议的
数据包,这个插件做的是在创建这个数据包的时候按照qq的协议封装这个数据包,再发送;然后接受的时候收到的肯定是个qq的数据包,插件捕捉到这个数据
包后解码,然后按照msn的协议再封装一次,发送给本机的客户端。关键的问题就是在填入本机的account信息的时候比较棘手,以及不知道这么做效率
怎么样。不过我想只要得到了对方的ip,建立一个p2p的通讯应该是没有问题的。
第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......
谢谢大家的关注以及回复。
On Nov 4, 12:37 pm, Zhao Tongyi <zhaoton...@gmail.com> wrote:
> 你好,
> 你要完成这个工作,我有几点要说明
> 第一,pidgin是使用插件的方式来完成各个协议的通讯,每一个插件之间并不进行通讯,
> 如果你要做到各个协议之间的通讯,你必须要实现各个协议之间的交互,
>
> 第二,QQ账户的客户端的IP并不是每一个客户端都会被服务器传送,也就是说你只能得到其中的一部分好友的IP地址
> 第三,好友的IP地址也有可能是内网的,比如(192.168.x.x),(10,x,x,x)等
> 第四,即使你得到了这些地址,你怎么通过MSN协议来完成通讯呢。
>
> 综述,是个复杂,在技术上也不一定可行的方案,祝好
>
> 2009/11/4 Kse8107 <chenghongzhou8...@gmail.com>
>
> > 我们是来自四川大学的一个团队,希望能够开发一个linux下的软件,实现pidgin中大部分协议之间的跨协议通讯。大体的想法如下:比如说我只有一
> > 个msn的账号但是没有qq的账号,但是我知道对方的qq账号并且想和对方通讯,那么可以通过一个qq的插件从服务器上匿名获取对方qq的IP(若对方
> > 在线),从而在没有qq账号的情况下以msn用户的身份完成所谓"跨协议"的通讯(嗯......虽然这点pidgin做的已经很好了,就是把所有的通讯协议集
嗯~现在所最担心的问题就是技术上不可行。我想说一下我所知道的:
第一,我们对这个新的中间的插件的期望的实现形式是,比如说本地用的是msn协议,然后按下发送键之后,客户端会试图调用底层函数构造一个msn协议的
数据包,这个插件做的是在创建这个数据包的时候按照qq的协议封装这个数据包,再发送;然后接受的时候收到的肯定是个qq的数据包,插件捕捉到这个数据
包后解码,然后按照msn的协议再封装一次,发送给本机的客户端。关键的问题就是在填入本机的account信息的时候比较棘手,以及不知道这么做效率
怎么样。不过我想只要得到了对方的ip,建立一个p2p的通讯应该是没有问题的。
第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......
既然是用 P2P,那麽跟MSN/QQ有甚麽關係?同意Zhao Tongyi 的說法,你這太混亂了,究竟你自己明不明白?
>
> 第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
> 连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
> 但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......
Pidgin 一般情況下不需要知道好友的 IP。
-khc
>
> 既然是用 P2P,那麽跟MSN/QQ有甚麽關係?同意Zhao Tongyi 的說法,你這太混亂了,究竟你自己明不明白?
>
这个,似乎是我表达的有问题。我们现在所做的,只是希望能够在技术上面讨论跨协议转换这种做法的可行性,就像msn和yahoo做的那样,最终期望达到
的效果是,我只需要拥有一个协议A的账号,就可以有办法同时跟协议A、B、C、D中的好友实现通讯。有点类似http://hi.baidu.com/
tyg1/blog/item/869e1f3088b5ae99a8018e5c.html这里讲的意思,但是gtalk我没用过。看它的原理描述是
Jabber Client-Jabber Server1-Jabber Server2-Other IM Client
(eg,MSN,YAHOO,ICQ),我想把它做成p2p的,就是两个不同协议客户端之间直接采用某种协议进行通讯(两者中的某一种?),不通过
Server转发。
另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
UDP,这不对么?
>
> Pidgin 一般情況下不需要知道好友的 IP。
>
这不了解。那是如何做的?全部通过服务器转发么?
我想這跟你對下面問題的誤解有關。
> 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> UDP,这不对么?
不對。
>
>>
>> Pidgin 一般情況下不需要知道好友的 IP。
>>
>
> 这不了解。那是如何做的?全部通过服务器转发么?
對
-khc
官方的qq也用的是这种方式么?这样的话每天服务器负载岂不是很大,中国那么多亿人用qq……
另外,我想请问一下,比方说我同时在跟2个人聊qq,所采用的密钥是不是一样的?
> 我所说的得到对端IP地址,是在QQ协议里,获取好友信息时候,服务器会发送给本地的一个IP地址和端口,那些插件都是根据QQ
>服务器传送的地址解析地理域名的,但是服务器并不能吧所有的地址发送给客户端,并且 有些是内网地址,
这个不是很懂。。
官方的qq也用的是这种方式么?这样的话每天服务器负载岂不是很大,中国那么多亿人用qq……
> 我想這跟你對下面問題的誤解有關。
>
> > 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> > UDP,这不对么?
>
> 不對。
>
>
> >> Pidgin 一般情況下不需要知道好友的 IP。
>
> > 这不了解。那是如何做的?全部通过服务器转发么?
>
> 對
>
另外,我想请问一下,比方说我同时在跟2个人聊qq,所采用的密钥是不是一样的?
On Nov 4, 4:23 pm, Kse8107 <chenghongzhou8...@gmail.com> wrote:
> 好吧~我大概知道了......我去看一下jabber相关,谢谢大家。