Matlab公网通信的实现(NAT123实现内网穿透)
说了好久要做一次公网通信的实验,这次因为一个博友的评论,搞了一天才有点儿成效,在此分享。
(关于公网与内网的相关说明请看博客:MATLAB实现简单的聊天软件)
NAT123下载
软件下载地址:NAT123
下载整合版的就行,方便好用,傻瓜式安装:
NAT123映射
打开软件,界面如下(做的和以前的QQ一样),点击添加映射:
根据下面的提示进行设置:
通讯协议选择说明
Maltab实现了TCP和UDP两种协议,但是在NAT穿透的环境下,Matlab的TCP实现非常鸡肋,所以使用UDP协议
(下面一段解释为啥TCP不行,不需要了解的直接跳到下一节)
一般情况下,TCP的server端应该只需指定监听的端口,然后与请求连接的第一个客户端进行连接,记录客户端的IP地址和端口。
Matlab不一样,你必须指定要连接客户端的IP和端口,看定义即可:
而这些NAT穿透软件所谓的穿透,根据我的理解是一种转发过程,从外部发来的消息,他会通过某个内部端口发送给你的绑定内部端口。
难以理解的话,下面用python的例子来解释,这个是经过内网穿透的TCP的python实现结果(也就是说,python和C++可以用):
上面我用客户端程序,连接了服务器4次,可以看到,服务器连接到的IP地址实际上是回环地址127.0.0.1,而端口则是不固定的,端口值总是在变大(根据我的实验,变大的速度是固定的)
那么这时候Matlab的TCP就不能用了,因为remoteport总是在变化,所以只能采用UDP来做。
确定外网域名的IP
(注此步可有可无,不需要的自行转下节)
找到外网的域名(我的是510ca336.nat123.fun):
打开命令行,输入 ping + 域名,可以看到外网的IP:
进行UDP通信
准备工作完成了,copy下面的代码:
%% 定义两个UDP对象
% UDP1与公网进行通信,因此远程主机和端口为公网的地址和端口
% 远程主机地址可用 域名和IP地址 两种形式
% UDP2接收来自NAT123公网的信息,而NAT123通过某内部端口转发给绑定的端口%UDP1=udp('47.98.243.161','RemotePort',39748,'LocalPort',8831);
UDP1=udp('510ca336.nat123.fun','RemotePort',39748,'LocalPort',8831);
UDP2=udp('localhost','RemotePort',8854,'LocalPort',8086);%% 打开两个UDP对象
fopen(UDP1);
fopen(UDP2);%% UDP1发送信息 UDP2接收信息
sendData=unicode2native('公网通信');%把要发送的汉字转换为ASCII码表示形式
fwrite(UDP1,sendData);
recData=fread(UDP2);
recData=native2unicode(recData);%把接收到的ASCII码转换为Unicode编码形式
sprintf(recData')% 打印接收的字符串%% 关闭TCP连接,释放内存
fclose(UDP1);
fclose(UDP2);
clear UDP1;
clear UDP2;
把代码进行如下修改:
外网域名、IP、端口在NAT123映射小节都有说明,内网端口也是上面定义的,因此就不详述了。
通信结果展示
效果如下:
完成了一次通信过程。
双向通信的思考
- 上面只是单向的通信过程,这也是UDP的缺点。
- 从UDP1发送的消息可以通过NAT123的公网转发到UDP2,因为UDP2监听了绑定端口。
- 而UDP2的消息传送到NAT123的公网时,消息中的目的地址只是本地IP和端口,因此NAT123不知道转发给谁。
- 我感觉,这个问题应该只能用TCP来解决,欢迎大家讨论。
- 仔细想了一下,用UDP的话,建立两个映射,使用四个UDP也可以勉强实现双向通信
Matlab公网通信的实现(NAT123实现内网穿透)相关推荐
- 如何使用利用nat123实现内网穿透
如何使用利用nat123实现内网穿透 首先,我们要明白何为内网穿透,内网穿透即即在计算机在局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,简单滴说,我们访问百度,实际上是访问了百度 ...
- 使用nat123进行内网穿透
使用nat123进行内网穿透 1.前期准备 下载并在用作服务器的机子上安装nat123(点此下载):安装后会出现两个软件,nat123是服务器用软件,nat123P2P是客户端访问用软件. 2.在服务 ...
- 无公网IP,使用ZeroTier免费内网穿透
无公网IP,使用ZeroTier免费内网穿透 有公网IP的用户还是建议使用端口转发的方式(速度最理想) 没有固定的公网IP,想要在家里或外地访问公司的服务器,常见的实现方案向日葵.teamviewer ...
- windows 下 nat123免费版内网穿透使用教程
1.首先进入nat123官方网站 http://www.nat123.com/Pages_2_32.jsp,下载windows版,根据环境变量选择下载. 2.安装程序,安装成功后运行,需要注册用户登录 ...
- 公网远程连接MongoDB数据库【内网穿透】
文章目录 1. 安装数据库 2. 内网穿透 2.1 创建隧道映射 2.2 测试随机公网地址远程连接 3. 配置固定TCP端口地址 3.1 保留一个固定的公网TCP端口地址 3.2 配置固定公网TCP端 ...
- 公网远程访问本地硬盘文件【内网穿透】
随着云概念的流行,不少企业采用云存储技术来保存办公文件,同时,很多个人用户也感受到云存储带来的便利,让云存储概念一时间风头无两.由于资料数据的敏感性.频繁爆发的云存储资料外泄事件和昂贵的云空间租用费用 ...
- 利用内网穿透,实现公网访问内网
由于IPV4地址资源的稀缺性,运营商分配给到用户的,基本都是内网IP.因此,公网电脑想要访问内网电脑时,常常会遇到没有公网IP,无法直接与内网电脑进行通信. 而在没有公网IP的情况下,想要访问内网,经 ...
- 公网IP与内网穿透的使用场景和区别
一.使用场景 最近在本地开发了一个web网页,数据库和后端都在本地,但是又外网访问的需求. 也就是说将一个单机版的转换为一个网络版的. 单机版是只有自己的局域网可以访问,网络版是外网也可访问. 查询了 ...
- 公网远程连接windows SQL Server数据库【内网穿透】
文章目录 1. 本地安装配置SQL Server 2. 将本地sqlserver服务暴露至公网 2.1 本地安装cpolar内网穿透 2.2 创建隧道 3. 公网远程连接sqlserver 3.1 使 ...
最新文章
- 《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)
- 三个大数据处理框架:Storm,Spark和Samza 介绍比较
- 好书荐读:阿里达摩院算法专家领衔《深度学习与图像识别:原理与实践》
- Vue监视---vue工作笔记0005
- Docker的使用(未完待续)
- 报表性能优化方案之多种报表服务器内存修改方法
- Java序列化机制和原理
- 吴恩达神经网络和深度学习-学习笔记-41-特征点检测
- 互联网“最强大脑”齐聚乌镇 他们看到了怎样的未来?
- tkinter教程_Tkinter教程–第2部分
- 应广单片机及mini-c快速入门
- 不透明度百分比 16进制值对照表;rgb色值16进制转化原理
- 黑大项目群第二次作业,飞行棋(龟兔赛跑)java
- MATLAB坐标轴(gca)的简单应用---MATLAB学习
- 孰能浊以止,静之徐清
- D3学习笔记之常用比例尺
- 黄金分割法_python
- 发现了JMX的好东西,大家分享一下!!
- python 爬取微博实时热搜,并存入数据库实例
- 去除office非正版提示的方法(转)