小弟在这里有个疑惑,2个QQ在聊天的时候,他们之间有没有分服务器和客户端聊天信息是否是直接从一台机传送到另外一台机(我觉得应该没有经过腾讯服务器)但是UDP通信的时候,不是也要建立服务器和客户端么我就想知道这个服务器是建立在哪个QQ之上

解决方案 »

  1.   

    UDP的传输的话,它只是两台计算机的通信,如果对方不在线,信息会由服务器中转的,而你的问题实际上是两台机都是服务器也是客户端,收消息却只用一个端口,是根据数据报的内容来区分信息来自哪个好友,QQ可以说是P2P模式的,只是他需要中间服务器来管理.
      

  2.   

    楼上说的没错。如果纯P2P,用JXTA就可以了
      

  3.   

    如果两方都会建立服务器的话,那下面这个问题怎么解决如果电脑是通过路由器访问外网的,可以说外网IP是由路由器在管理的,我用的都是路由分下来的内网IP如果外网的人要访问我这台电脑,那么我就必须要在路由器上指定一个内网IP,并且开一个相应的端口才能让外网访问进来。意思就是说,另一台机建立了UDP服务器,你要连他的外网IP和端口,那么他如果是使用路由器上网的话,他就必须在路由器中指定开发一个内网IP和相应的端口,不开的话外网是访问不到的但是QQ貌似不需要这样做啊,它聊天也不需要去用外网映射一个内网IP,并允许开发指定端口啊
    都是可以直接聊天的,就好像UDP服务器不在这两台机器之间一样。咋回事呢
      

  4.   

    你上Google 查找 UDP 穿透就行,这个是通常使用的技术。简单点说就是
    1、通过UDP也服务器通讯后,你网关默认就是作了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的
    2、用户A先通过服务器知道用户B的外网地址与端口
    3、用户A向用户B的外网地址与端口发送消息,
    4、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。
    5、但是用户A的网关就会增加了一条允许规则,允许接收从B发送过来的消息
    6、服务器要求用户B发送一个消息到用户A的外网IP与端口号
    7、用户B发送一条消息,这时用户A就可以接收到B的消息,而且网关B也增加了允许规则
    8、之后,由于网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口号发送消息
      

  5.   

    对了,如果一台电脑上开了两个或多个QQ的话呢,是否建立了2个或多个UDP服务器
      

  6.   

    如果一台机器打开了两个QQ,你本地实际上就打开了两个端口的,分别对应一个QQ同时网关也会有两个不同的端口映射到你内网的端口号
    所以当另外一个用户给其中一个QQ发消息的时候,它只会发送到正确的端口号
    服务器可以只有一个(当然QQ不可能只有一台服务器),服务器的作用只在告知另外一方用户的外网IP与端口号,同时要求另外一方进行【打洞】操作,这样才可以使得双方建立UDP直连