我现在做的这个项目有个对话模块要我做,
基本上就和QQ差不多了,
现在遇到一难题,不知道怎么解决,想请教各位大哥们:
怎么样让外网访问局域网中的机子,这个我了解一点局域网中的IP都是一样的,只要端口不一样就可以了,但是我现在客户端用的是TClientSOCKET服务端用的是TServerSOCKET局域网中没有什么问题,但是我访问不了外网,外网也访问不了局域网,
小弟初学DELPHI不久,还请各位大哥赐教;
基本上就和QQ差不多了,
现在遇到一难题,不知道怎么解决,想请教各位大哥们:
怎么样让外网访问局域网中的机子,这个我了解一点局域网中的IP都是一样的,只要端口不一样就可以了,但是我现在客户端用的是TClientSOCKET服务端用的是TServerSOCKET局域网中没有什么问题,但是我访问不了外网,外网也访问不了局域网,
小弟初学DELPHI不久,还请各位大哥赐教;
这个应该已经不属于Delphi范畴了
看一下宽带共享的问题,有类似的问题的。
http://www.magicwinmail.com/technic_nat.htm
http://www.blueidea.com/computer/net/2003/1148.asp
等等
如果没有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)当然如果用户量不大,完全可以采用服务器中转的方式。这样实现比较简单。