我现在做的这个项目有个对话模块要我做,
基本上就和QQ差不多了,
现在遇到一难题,不知道怎么解决,想请教各位大哥们:
怎么样让外网访问局域网中的机子,这个我了解一点局域网中的IP都是一样的,只要端口不一样就可以了,但是我现在客户端用的是TClientSOCKET服务端用的是TServerSOCKET局域网中没有什么问题,但是我访问不了外网,外网也访问不了局域网,
小弟初学DELPHI不久,还请各位大哥赐教;

解决方案 »

  1.   

    端口映射
    这个应该已经不属于Delphi范畴了
    看一下宽带共享的问题,有类似的问题的。
      

  2.   

    端口映射?还请 crapex(编程浪子) 能不能说的详细一点
      

  3.   

    你可以在网上搜索一下关于端口映射的问题,
    http://www.magicwinmail.com/technic_nat.htm
    http://www.blueidea.com/computer/net/2003/1148.asp
    等等
      

  4.   

    如果局域网内有一个INTERNET上固定的IP地址可以使用端口映射的方法,使外网也可以通过这个IP的这些端口访问内网里被映射的机器。
    如果没有Internet的固定IP(比如通过拨号上网、ADSL等,都是临时分配的IP,不固定)那么采用端口映射就不好解决此问题。针对你的问题,我觉得可以采用QQ的方法:
    (1)在公网上放置一台服务器做为中转,此计算机需要固定IP,或者有域名(这样内网要访问时可以通过DNS解析出IP地址);
    (2)客户端在登录时,登录到此服务器上(可以采用UDP或者TCP协议)
    (3)QQ是采用UDP协议,当客户端登录时,服务器记录此客户端的IP地址和端口号(这个IP地址和端口号可能是通过NAT后的IP和端口,客户端必须和服务器保持链路维护,即每隔一段时间,QQ好像是40秒发送一次,发送特定数据包给服务器,否则,此链路可能会被NAT服务器等断开),
    (4)客户端登录后,服务器会把他上线的好友的IP地址和端口号发送给他,这样两个客户端就有可能可以绕开服务器直接进行点对点通信。
    (5)当然如果用户量不大,完全可以采用服务器中转的方式。这样实现比较简单。