使用Socket在公网上通信

一.背景相关:

   在我们常用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


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值