你不会自己希望用C# 做个QQ?
用SOCKET ,UDP协议,很容易实现客户端之间交互关键是服务端的客户地址以及信息服务

解决方案 »

  1.   

    服务器端需要提供给对方用户的信息,这样的目的是当一个用户希望连接另外一个用户的时候
    必须提供 IP 与 端口号了这样做,就必须有一个动态的数据库,或者数据表,当有人上线就需要通知所有好友,并且通知他们这个好友的 ip 以及端口号,有了这些信息就可以直接通过Socket 通讯,或者通过服务器转发
      

  2.   

    大概模型是QQA从本地通过使用UDP方式申请一个端口登陆服务器,服务器记录下这个QQ的公网的IP和端口(在此,这个QQ所申请的端口被各个代理或网关解析成另外一个端口,只要往这个端口写数据,就会被传递回到最原始的端口),另外一个QQB从服务器读取这个QQA的IP和端口,然后就可以通过UDP方式往这个IP和端口发送数据包,网关或代理就会把这个数据包传递给QQA所申请的端口,QQA通过监听这个端口就可以取得数据包了。
    反之亦然以前,QQ隐身的时候数据包都是往服务器走的,现在好像改善了,只有少量的数据往服务器走
      

  3.   

    To cellblue(cellblue):
       如兄台所说,那么QQ 服务器其实只是帮助QQ A 与QQ B 保存一个双方的通讯地址,当QQ A 要发送消息给QQ B 的时候就从服务器上取得QQ B 的地址,然后往这个地址发送消息,反之也是?
       那请问兄台,服务器如何判断这个地址仍然正确,就是如何判断QQ A 一直在线?谢谢
      

  4.   

    To windinwing(潇笑):
       那是否就说明OICQ 的工作方式是,QQ A 与QQ B 是通过服务器通讯,A 发送信息给B 需要先发到服务器,再有服务器发送给B ,而不是A 和B 直接通讯的。
      

  5.   

    服务器相当于拉皮条的,如先A上线把A介绍给B ,服务器只保存在线列表和端口号
       然后上线时载好友列表,每隔一定时间和服务器对比一次,来刷新列表。 发送消息
      时应该是A真接发给B,当到达一定时间没有发送成功时就转交给服务器转发
      

  6.   

    windinwing(潇笑) 老兄,这个协议似乎已经不在使用了,现在tencent使用的协议已经有了比较nb的加密协议,我不懂汇编,但是我用嗅探器得到的qq传输数据是的的确确经过加密的.我对这个很有兴趣,你们谁能公开有关的细节呢?
    谢谢大家