看过很多关于局域网下的两台设备之间的通信方式,最多的就是通过socket进行tcp/ip通信。建立一个服务端,再建立一个客户端,客户端向服务端发起请求连接。然后再进行两端的通信。但发现其实这却存在着很多的问题与不足–如果是不在同一局域网下的两台设备怎么通信。
经过网上资料的查询终于找到了解决非同一局域网下的两台设备的通信问题–服务器。
这就要牵扯到一大堆名词上了,简而言之 就是我们的一般所查到本机的ip是叫做“内网ip”或“本地ip”,它是由路由分配给每一个在其局域网下的每台设备的地址。甚至于没有网络也可以进行局域网中的消息传输,但却不能给不在同一局域网下的设备传输消息。原因就是关于内网与外网之间的关系。外网ip才是连接Internet的ip,而路由器将一个外网ip分到n个设备上,在给每个设备取一个名字,就是内网ip。
那么我们如果想跟另一个不在同一局域网的设备连接的话,那么我们就要先知道对方的外网ip,通过我们的内网穿过外网到达人家的内网才行。这里就要引入一个名词————“nat”
“NAT(Network Address Translator)是网络地址转换,它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。NAT的最典型应用是:在一个局域网内,只需要一台计算机连接上Internet,就可以利用NAT共享Internet连接,使局域网内其他计算机也可以上网。使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。”
而我们可以用的方式是:需要的技术就是内网穿透:即NAT穿透,采用端口映射,让外网的电脑找到处于内网的电脑。还需要一个中间设备————服务器。原理就是,因为两边通过nat穿透,连接到服务器,这是服务器就会得到两边通过端口映射的IP地址与端口号,然后就可以让服务器将两边的消息传送到对方的设备上了。
像QQ了或者是访问网络都是通过这种方式进行数据传输的。
当然咱们也可以模拟一下非同一局域网之间的消息传输,只需要一根网线,两个连在这根网线的局域网下的路由器。服务器设备连接网线,两个客户端分别连接两个路由器如果反了的话就会发现根本不能连接,因为,只能从内网向外网连接,不能由外网向内网连接。然后,这就是一个模拟的服务器与客户端之间的关系了。这时候当两台客户端连接到服务器之后你就会发现,服务器上显示的ip与你本机现示的ip不一样,这就是路由器通过端口模拟将内网ip换位外网ip并将设备的地址模拟成一个端口。