社区
Java SE
帖子详情
QQ的UPD聊天原理
zhuolei123
2009-12-07 08:45:13
小弟在这里有个疑惑,2个QQ在聊天的时候,他们之间有没有分服务器和客户端
聊天信息是否是直接从一台机传送到另外一台机(我觉得应该没有经过腾讯服务器)
但是UDP通信的时候,不是也要建立服务器和客户端么
我就想知道这个服务器是建立在哪个QQ之上
...全文
522
12
打赏
收藏
QQ的UPD聊天原理
小弟在这里有个疑惑,2个QQ在聊天的时候,他们之间有没有分服务器和客户端 聊天信息是否是直接从一台机传送到另外一台机(我觉得应该没有经过腾讯服务器) 但是UDP通信的时候,不是也要建立服务器和客户端么 我就想知道这个服务器是建立在哪个QQ之上
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mqinyang1108
2009-12-09
打赏
举报
回复
学习了~~~
xingda1989
2009-12-09
打赏
举报
回复
学习,学习
ChDw
2009-12-09
打赏
举报
回复
如果一台机器打开了两个QQ,你本地实际上就打开了两个端口的,分别对应一个QQ
同时网关也会有两个不同的端口映射到你内网的端口号
所以当另外一个用户给其中一个QQ发消息的时候,它只会发送到正确的端口号
服务器可以只有一个(当然QQ不可能只有一台服务器),服务器的作用只在告知另外一方用户的外网IP与端口号,同时要求另外一方进行【打洞】操作,这样才可以使得双方建立UDP直连
tjb1216
2009-12-08
打赏
举报
回复
好问题,看来我学的太浅了
往何
2009-12-08
打赏
举报
回复
学习!
zhuolei123
2009-12-08
打赏
举报
回复
对了,如果一台电脑上开了两个或多个QQ的话呢,是否建立了2个或多个UDP服务器
zhuolei123
2009-12-08
打赏
举报
回复
如果两方都会建立服务器的话,那下面这个问题怎么解决
如果电脑是通过路由器访问外网的,可以说外网IP是由路由器在管理的,我用的都是路由分下来的内网IP
如果外网的人要访问我这台电脑,那么我就必须要在路由器上指定一个内网IP,并且开一个相应的端口
才能让外网访问进来。
意思就是说,另一台机建立了UDP服务器,你要连他的外网IP和端口,那么他如果是使用路由器上网的话,他就必须在路由器中指定开发一个内网IP和相应的端口,不开的话外网是访问不到的
但是QQ貌似不需要这样做啊,它聊天也不需要去用外网映射一个内网IP,并允许开发指定端口啊
都是可以直接聊天的,就好像UDP服务器不在这两台机器之间一样。。。。咋回事呢
yifine1987
2009-12-08
打赏
举报
回复
用Socket就行
greenbar
2009-12-08
打赏
举报
回复
2个都有udp服务器把
ChDw
2009-12-08
打赏
举报
回复
[Quote=引用 3 楼 zhuolei123 的回复:]
如果两方都会建立服务器的话,那下面这个问题怎么解决
如果电脑是通过路由器访问外网的,可以说外网IP是由路由器在管理的,我用的都是路由分下来的内网IP
如果外网的人要访问我这台电脑,那么我就必须要在路由器上指定一个内网IP,并且开一个相应的端口
才能让外网访问进来。
意思就是说,另一台机建立了UDP服务器,你要连他的外网IP和端口,那么他如果是使用路由器上网的话,他就必须在路由器中指定开发一个内网IP和相应的端口,不开的话外网是访问不到的
但是QQ貌似不需要这样做啊,它聊天也不需要去用外网映射一个内网IP,并允许开发指定端口啊
都是可以直接聊天的,就好像UDP服务器不在这两台机器之间一样。。。。咋回事呢
[/Quote]
你上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和端口号发送消息
it115
2009-12-07
打赏
举报
回复
楼上说的没错。如果纯P2P,用JXTA就可以了
wujingsonggege
2009-12-07
打赏
举报
回复
UDP的传输的话,它只是两台计算机的通信,如果对方不在线,信息会由服务器中转的,而你的问题实际上是两台机都是服务器也是客户端,收消息却只用一个端口,是根据数据报的内容来区分信息来自哪个好友,QQ可以说是P2P模式的,只是他需要中间服务器来管理.
QQ
--基于TCP/UDP协议的通讯
原理
发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的! 一、登录
QQ
客户端在局域网内,当你打开
QQ
登录到
QQ
服务器时,通过外网,你的客户端与
QQ
服 务器建立了一个长连...
day1 –
upd
1. 什么是TCP/IP、UDP? \2. Socket在哪里呢? \3. Socket是什么呢? \4. 你会使用它们吗? 什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 ...
基于UDP协议的socket套接字编程
目录 一、UDP套接字简单示例 1.1 服务端 二、客户端 三、
UPD
套接字无粘包问题 3.1 服务端 3.2 客户端 四、
qq
聊天
4.1 服务端 4.2 客户端1 ...
UDP套接字
一、UDP套接字简单示例 1.1 服务端 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP server.bind(('127.0.0.1', 8080)) while True: data, client_addr = server.recvfrom(1...
Java的网络编程之
聊天
室功能
平常大家
聊天
都是使用
qq
或是微信等软件进行网上的交流那么大家知道这些功能是如何实现的呢,其实它运用的还是java中的多线程的
原理
,只是在此的基础上加入的一些网络编程语言,从而使得用户可以在网上进行的畅快的沟通。 今天的写的这个是简单的网络
聊天
第一台机器上面需要编写的代码,实现两台机器的交流 需要知道对方的IP地址( 输入cmd指令 找到Windows 命令处理程序 右键点击以管理员
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章