QQ是点对点的,服务器只负责记录每个人的IP等基本信息。当你双击一个好友的头像弹出聊天界面时,服务器就把对方的IP等信息传给你,然后你们之间就建立起一个连接,服务器是不管你们之间的聊天信息传送的(除非对方显示为不在线,见过聊天记录里“通过服务器中转”吧?^_^).

解决方案 »

  1.   

    转:
    新版QQ有一些变动,比如在发送文件或进行语音视频连接时,都提示“已经建立了UDP连接”,那么什么是UDP连接呢?
    我们知道,进行TCP通讯时,先要建立连接,而UDP是一种无状态交换,无所谓连接。需要发送时,直接给出目标地址和端口就可以。那么这里的“连接”是什么呢?
    其实这里是一种逻辑上的连接。UDP通讯与TCP通讯的一个重要区别就是,TCP连接的结果是实现了一个通讯管道,所谓管道,包含一个含义,就是先进先出,先发出的信息必然先到达,因此对发送的数据可以保持“序”,有序的数据流。而UDP则没有这个条件,如果网络环境比较复杂,根本不能指望先发出的信息会先到达。因而,要实现例如语音和视频交换,就必须解决数据包顺序问题。在很多情况下,使用TCP而不使用UDP往往也是这个原因。
    那么建立“UDP连接”是什么意思呢?其实是建立一种逻辑(用户协议)上的过程准备。发送方发送一种特定标识的数据包,当接收方收到时,就排列在接受器里,如果包是顺序的,就把已经到达的部分(一个或多个包)提交“数据到达”,如果顺序不正确,就返回信号,申请未到达的包,如果包的号码重复,就放弃后来的数据包,以此实现像TCP一样的“管道效应”。
    使用UDP的原因,当然是为了对付上百万的在线用户(用TCP是不可能的)。而更广泛使用UDP(原来是使用TCP实现视频和文件交换)则是为了通过各种网关。
    说这些干吗呢?那是因为最近P2P模式的应用越来越受到重视,而在现有网络环境下,只有UDP最方便和保险。很多人在使用UDP过程中,经常由于某些原因而拿TCP打补丁,其实,用好UDP可以解决大多数通讯应用。
    还有一个,QQ的“屏幕拷贝”是如何实现的呢?方法很简单,复制当前屏幕,并用一个窗体全屏显示,你所进行的区域选择,是在那个窗口上(好象真在WINDOWS上),当你双击确认时,双击的是QQ的图片窗口,在QQ取得所有需要的信息时,那个窗口关闭,恢复实际的屏幕。
      

  2.   

    谢谢nmlvjun(网事如风)仁兄的解释,非常清楚。
      

  3.   

    像QQ那样,点对点的聊天,也是用的UDP吗,那不是也要指向连接了吗?