我不是高手,大家共同学习。你所说的公用ip上网应该就是利用代理服务器共享上网,即computerA具有类似192.168.0.x内部ip的情形。这种情况下,只有computerA主动连接computerB并且保持这种连接,B才能向A发送信息。因为ip
                              ~~~~~~~~~~
192.168.0.x对B是路由不到的。代理服务器的一个重要功能就是如此,即保护内
网不被外网直接访问。qq是怎么实现的,我也不太懂,不过它应该也是这种情形,即A1,A2,A3...连接
B,B保存这些连接,所谓连接就是结构或类,当然最终确实是存在内存中,不过
不要担心内存不够用,我记得32位机器可寻址4GB的内存空间。另外qq也有数台
服务器共享分担。

解决方案 »

  1.   

    我所说的公用IP是这样的情况:一个公司的局域网中,大家通过一个服务器
    上网的,服务器通过ADSL、ISDN或其他方式都可以,代理呢,则 MS Proxy、
    Wintage 之类的。这样局域网对外只有一个IP。但局域网内的机器都可以访
    问Internet,并且都能够Ping同外网IP。实际上这样的网络情形很常见的。敬请各位 Winsock、VB 高手解答。
      

  2.   

    既然回了,就再说清楚点。
    对于公用ip上网的情形,如果B要给A发送信息,只能如你所说——   "ComputerA主动请求连接ComputerB,一旦连接建立,
    ComputerB接收连接的Winsock调用SendData方法就可以将消息发送给ComputerA而无需理会ComputerA的IP及Port号"此外别无其它方法,但是并不需要每次B给A发送信息时都要A主动连接,在第一次连接之后未断开之前,B都可以向A发送消息。即A只需主动连接一次。
    当然协议要选面向连接的TCP(sckTCPProtocol),而不是UDP.
       你到任何一个VB学习网站下载一个源代码看看就知道了。
      

  3.   

    谢谢你的(cuilonggang)答复。这个我是知道的,即让ComputerA与ComputerB的连接保持而不释放。但我觉
    得这个方法并不高明,如果有很多类似ComputerA的客户请求呢?那ComputerB
    不是要总要同时保持N多个连接吗?这是一个静态的解决办法,而非动态的。
    动态的就是ComputerB确实要给ComputerA发送消息的时候:建立连接、发
    送、撤销连接。就是不知道QQ、ICQ这些东西是怎么实现的,如果要保持连接,那 QQ 有同时
    几百万在线,这个做法显然行不通(我认为)。如果不是使用类似Winsock的
    技术(包括Winsock空件或底层的Winsock API),那QQ是怎么做到的呢?敬请高手们解答、共同探讨。
      

  4.   

    实际上QQ使用的是UDP协议,一种无连接协议。
    自己去看看书先。
      

  5.   

    我想应该是要保存的,因为只有 IP 和 PORT 所以就算保存也不大,还有就是要隔一段时间打一些信息以保持连接
      

  6.   

    To xiaoxinghappy(小星),谢谢解答。如果包存的,这个数据量也太大了,
    想想 QQ 同时在线有几百万,这些信息要保存下来该是多大,程序又怎么
    能做大这么快的响应呢?