说了好久要做一次公网通信的实验,这次因为一个博友的评论,搞了一天才有点儿成效,在此分享。
(关于公网与内网的相关说明请看博客: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映射小节都有说明,内网端口也是上面定义的,因此就不详述了。

通信结果展示

效果如下:

完成了一次通信过程。

双向通信的思考

  1. 上面只是单向的通信过程,这也是UDP的缺点。
  2. 从UDP1发送的消息可以通过NAT123的公网转发到UDP2,因为UDP2监听了绑定端口。
  3. 而UDP2的消息传送到NAT123的公网时,消息中的目的地址只是本地IP和端口,因此NAT123不知道转发给谁。
  4. 我感觉,这个问题应该只能用TCP来解决,欢迎大家讨论。
  5. 仔细想了一下,用UDP的话,建立两个映射,使用四个UDP也可以勉强实现双向通信

Matlab公网通信的实现(NAT123实现内网穿透)相关推荐

  1. 如何使用利用nat123实现内网穿透

    如何使用利用nat123实现内网穿透 首先,我们要明白何为内网穿透,内网穿透即即在计算机在局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,简单滴说,我们访问百度,实际上是访问了百度 ...

  2. 使用nat123进行内网穿透

    使用nat123进行内网穿透 1.前期准备 下载并在用作服务器的机子上安装nat123(点此下载):安装后会出现两个软件,nat123是服务器用软件,nat123P2P是客户端访问用软件. 2.在服务 ...

  3. 无公网IP,使用ZeroTier免费内网穿透

    无公网IP,使用ZeroTier免费内网穿透 有公网IP的用户还是建议使用端口转发的方式(速度最理想) 没有固定的公网IP,想要在家里或外地访问公司的服务器,常见的实现方案向日葵.teamviewer ...

  4. windows 下 nat123免费版内网穿透使用教程

    1.首先进入nat123官方网站 http://www.nat123.com/Pages_2_32.jsp,下载windows版,根据环境变量选择下载. 2.安装程序,安装成功后运行,需要注册用户登录 ...

  5. 公网远程连接MongoDB数据库【内网穿透】

    文章目录 1. 安装数据库 2. 内网穿透 2.1 创建隧道映射 2.2 测试随机公网地址远程连接 3. 配置固定TCP端口地址 3.1 保留一个固定的公网TCP端口地址 3.2 配置固定公网TCP端 ...

  6. 公网远程访问本地硬盘文件【内网穿透】

    随着云概念的流行,不少企业采用云存储技术来保存办公文件,同时,很多个人用户也感受到云存储带来的便利,让云存储概念一时间风头无两.由于资料数据的敏感性.频繁爆发的云存储资料外泄事件和昂贵的云空间租用费用 ...

  7. 利用内网穿透,实现公网访问内网

    由于IPV4地址资源的稀缺性,运营商分配给到用户的,基本都是内网IP.因此,公网电脑想要访问内网电脑时,常常会遇到没有公网IP,无法直接与内网电脑进行通信. 而在没有公网IP的情况下,想要访问内网,经 ...

  8. 公网IP与内网穿透的使用场景和区别

    一.使用场景 最近在本地开发了一个web网页,数据库和后端都在本地,但是又外网访问的需求. 也就是说将一个单机版的转换为一个网络版的. 单机版是只有自己的局域网可以访问,网络版是外网也可访问. 查询了 ...

  9. 公网远程连接windows SQL Server数据库【内网穿透】

    文章目录 1. 本地安装配置SQL Server 2. 将本地sqlserver服务暴露至公网 2.1 本地安装cpolar内网穿透 2.2 创建隧道 3. 公网远程连接sqlserver 3.1 使 ...

最新文章

  1. 《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)
  2. 三个大数据处理框架:Storm,Spark和Samza 介绍比较
  3. 好书荐读:阿里达摩院算法专家领衔《深度学习与图像识别:原理与实践》
  4. Vue监视---vue工作笔记0005
  5. Docker的使用(未完待续)
  6. 报表性能优化方案之多种报表服务器内存修改方法
  7. Java序列化机制和原理
  8. 吴恩达神经网络和深度学习-学习笔记-41-特征点检测
  9. 互联网“最强大脑”齐聚乌镇 他们看到了怎样的未来?
  10. tkinter教程_Tkinter教程–第2部分
  11. 应广单片机及mini-c快速入门
  12. 不透明度百分比 16进制值对照表;rgb色值16进制转化原理
  13. 黑大项目群第二次作业,飞行棋(龟兔赛跑)java
  14. MATLAB坐标轴(gca)的简单应用---MATLAB学习
  15. 孰能浊以止,静之徐清
  16. D3学习笔记之常用比例尺
  17. 黄金分割法_python
  18. 发现了JMX的好东西,大家分享一下!!
  19. python 爬取微博实时热搜,并存入数据库实例
  20. 去除office非正版提示的方法(转)

热门文章

  1. 数字化医院PACS影像系统 三维影像后处理技术应用
  2. 广东财经大学理工科毕业论文word模版
  3. MTK6765智能安全帽方案介绍
  4. 介绍一款搜索引擎(Magi):也就比百度好用一丢丢
  5. 诚之和:没了“全网最低价”,薇娅李佳琦靠什么支撑背后公司上市?
  6. Windows Server各版本差异
  7. 你还在用if-else吗?
  8. 评职称有什么好处?有以下8点好处
  9. linux 备份iphone,备份苹果硬盘的数据
  10. spi转串口 linux驱动,RT_Thread WK2124 SPI转串口芯片驱动软件包