QQ 的实现大概过程(1) 发起会话的会话端先跟服务器联系,这一端有服务器的IP和端口(2) 服务器接收到会话端的请求后,获取会话端的IP和端口,并且获取接收会话端的唯一 【标志】(QQ号码),然后把根据会话端的唯一标志
查找接收会话端的IP和端口(没有猜错,每个端的端口都是临时分配)。每个QQ登陆后都要到服务器【注册】,服务器通过这个过程获取ip和端口
(3) 完成之后,马上把会话端的请求以及会话端的IP和端口号发送给接收会话端.(4) 接收会话端接收到来自服务器端的请求后,解析得到会话端的IP和端口号,直接跟会话端建立联系(5) 端口是qq启动时分配的。现在的问题是,端口是怎么分配的?有没有类似编程经验的,
查找接收会话端的IP和端口(没有猜错,每个端的端口都是临时分配)。每个QQ登陆后都要到服务器【注册】,服务器通过这个过程获取ip和端口
(3) 完成之后,马上把会话端的请求以及会话端的IP和端口号发送给接收会话端.(4) 接收会话端接收到来自服务器端的请求后,解析得到会话端的IP和端口号,直接跟会话端建立联系(5) 端口是qq启动时分配的。现在的问题是,端口是怎么分配的?有没有类似编程经验的,
服务端需要建立Socket服务,当然是自己指定一个源端口,有冲突则进行异常处理。
客户端则根据服务端IP和端口进行连接呀。这个问题没有什么可问的啊。一句话:
服务端自己指定源端口,客户端指定目的端口。客户端源端口则是由OS自行分配的。
你用Socket类里面的getLocationPort() 或者 getPort()分别可以查看自身的端口号和远程连接方的端口号
每多运行一个QQ登陆窗口,使用的端口号加1
也就是说如果运行了两个QQ,第二个QQ使用的端口号是4001,而不是4000
QQ在进行文本方式聊天的时候,采用的是UDP协议。
在使用传文件,语音聊天、视频聊天的时候,才是使用的TCP协议。
只有用了TCP协议时,服务端与客户端才会建立连接。
如果你想了解更多,建议你去看看网络原理中的相关知识。
一个是由程序(用户)自己定义,然后绑定(但是,很可能会绑定失败,也就是说,端口已经被占用了);
另一个是由操作系统自行分配(一般不会绑定失败,但是,端口号具有不确定性)。另外,
我觉得,楼主的理解重心不应该在端口号的获得、分配以及绑定上边。
我觉得,重点应该在:
为什么,会话发起方的IP及Port信息,不是由发起方直接告诉给服务器,
而是由 服务器端获取发起方当前的IP及Port信息 ?很显然,两种方式,得到的信息内容,很可能是不相同的。这就是我刚才强调的 NAT情况。
也是为什么使用打孔技术的原因。
服务端的端口可以自已分配。ServerSocket("",8888);
4000以后的几个连续端口,有时候也会被QQ占用。