由外网向内网主动连接是连不通的。你必须使用外网机器做服务器。QQ使用的UDP协议,现在也有TCP协议,他的服务器在公网上。

解决方案 »

  1.   

    可是如果在局域网内用qq,qq登陆之后,不是就和qq服务器一直保持连接吗?此时,当qq服务器给qq发消息时,不就相当于外网与局域网通信吗?那这是怎么通信的呢?
      

  2.   

    QQ默认是使用UDP协议的,这个我也一直没有完全搞明白。但是如果是一些如FTP之类的TCP协议,那么其实是局域网内的机器主动连接外部机器,这个时候只要外部机器只要用这个Socket就能发送数据会内部机器,因为网关已经帮你们之间建立
    联系了。但是外部机器直接想主动连接内部机器是不行的,否则怎么叫做内部呢?
      

  3.   

    对,外部机器直接主动联接,肯定不行!
    在局域网内上qq之后,qq主动和qq服务器建立联接,服务器就可以qq通信了。
    可是,问题在于,这条通路为什么能保留那么久,直到下线为止?而且,这条通路在qq上线期间一直都没有变,一直都是那条通路,想问的是,这条通路应该如何保持?
      

  4.   

    TCP--连接的协议,连接的协议就意味着你不发出断开指令就一直连接。无须你去保持,IP层会替你保持。
      

  5.   

    好象可以使用HttpTunnel的技术,大致意思是这样的,不知道对不对,记符号 S(局域网外服务器) M(局域网对外服务器) C(局域网内部机器)普通情况下
      C 向 M 发送 请求 S 的数据(网页内容)(假设通过端口 80)
      M 发送请求 S 的数据,S 把数据发给M,
      M 发送数据给 C
    由于这条连接是一直可用的,假设我们要使用QQ所以可以在 S 上启动一个Http服务,这个服务把请求的数据转发到 S 上的QQ请求当收到QQ请求后,把得到的数据进行封装,做成Http服务的数据然后发送给请求方下面我们可以看这种情况下的数据传输  C 向 M 发送请求 S 的数据(Http)
      M 向 S 请求一个 Http 的数据
      S 上的 HTTP 服务 收到请求后知道这是一个 关于 QQ 的请求
      S HTTP 服务向 S 上的 QQ 服务发送一个请求
      后面的过程上面已经说了 :)
      C 收到 M 传来的 Http 数据时,把QQ的数据分解出来  大致就是这样的  从上面的过程可以看出,你需要自己写一个 Http Server, 和Http Client  不过这个东西已经有现成的了,请 Google Httptunnel :D
      

  6.   

    QQ和服务器连接使用的应该是TCP吧。
      

  7.   

    内网机器主动连接,产生通路,外网机器可以根据这条通路和内网机器通信,但必须是UDP的!