一.背景相关:
在我们常用c/s模式的socket通信中,都是在局域网中实现通信。这很显然是相当的不爽嘛,比如你想用socket给人家的设备加一个暗门,方便自己远程控制对方,结果一看只能在局域网内控制,这很显然是相当的不爽嘛。。好吧,,我是坏人。。这种事情,我肯定是不会干的,恩,我只是想做一个公网的上聊天小软件,对,,就是这样。。
二.实现目标:
我们想要实现的目标就是可以socket c/s模式下载公网上聊天,不管连接方是gprs,3g还是wifi,只要能连接网络,也不管互相的连接方是手机还是电脑。好吧,在某种特定情况下,我们也可以让对方手机可以友好的关机。。。
三.实现准备:
实现这些步骤我们需要准备如下些准备:
1. 需要能够正常收发信息的socket客户端/服务器模块,不管是c、java还是android,网上都是一收索就有一大堆,就不详细介绍了。
2. 其次,之所以我们可以在局域网下通信,而没在同一局域网下就不能通信的原因:简单的说,就是在不同的私网之间无法直接通信的,我们使用192.168.x.x都是私网,但是所有的私网却都可以和公网ip直接通信的。所以。想要在两个私网之间通信的话,我们就需要多一个步骤,也就是需要一个公网的IP作为中转站。也就是实现如下:
局域网IP(1) ----> 公网IP --->局域网IP(2) 局域网IP(2) ---> 公网IP ---->局域网IP(1)
这样,局域网的IP(1)就能正常通信和局域网IP(2)了。
因此,我们需要一个公网IP,同时服务器需要做成一个中转站,也就是说当服务器接收到来之局域网IP(1)的数据之后,再转发到局域网IP(2)上。
四.实现步骤:
1.编写软件。
编写socket的客户端/服务器可以在局域网下正常通信的软件模块,注意,服务器需要编写成转发的模式,不停给局域网IP(1)和局域网IP(2)互相转发联系数据。
2.准备公网IP:
需要使用工具,我使用的花生壳+自己宿舍里电信的网络,然后加上路由器映射端口(别用公司的网络做实验。。~_~)。
(1) 首先去花生壳的官网注册账号和申请一个域名,网上很多教程,很容易搞定了,然后windows下安装花生壳的客户端,激活自己的域名,出现了如下截图之后,你的注册域名就可以使用了:
(2) 然后登录自己的路由器(192.168.1.1),在路由器上,登陆自己的花生壳域名:
(3) 然后对路由器做如下设置,来映射路由器端口,映射的端口必须就是服务器绑定的那个端口:
192.168.1.103 是运行服务器的电脑所在IP,82服务器绑定的端口(我最开始使用大于1024的端口,可以在手机可以在wifi下公网通信正常,但是gprs下无法连接,求大神。。)
在这个路由器界面下,输入服务器所在电脑的ip和mac地址,同时点击同意arp绑定。
(3) 设置完毕,注意需要修改下客户端程序,客户端连接的ip改成自己的花生壳域名,连接的端口改为自己路由器映射的端口。 (4) 然后,只要都登录了客户端,就都可以直接通信了。。当然,绝对不能对服务器做什么其他手机。客户端啥的,也绝对不能做主客户端,副客户端什么的,~_~。
五。测试代码:
我的测试代码在这:http://download.csdn.net/detail/u011630458/6955933