Matlab上使用UDP进行多主机通信(单主机模拟)
UDP是无连接的通信,只需要 监听相应的端口 ,即可进行 接收多主机 消息,通过改变 目的端口和目的主机IP 即可发送多主机消息,话不多说,直接贴代码。
%u1作为服务器,u2、u3作为客户机,u1监听所有发到端口8866的消息(其实u1,u2,u3都相当于服务器)
%u1可以接收所有8866口来的消息
%给客户机发消息时,更改相应远程主机的端口号即可(真正远程主机通信,还需要更改远程主机的IP地址)
u1=udp('222.20.37.178','RemotePort',9090,'LocalPort',8866);%与IP为222.20.36.185的远程主机(其实是我自己的IP,需要换成自己的)建立udp,远程主机端口为8866,本地主机端口为8844。
u2=udp('222.20.37.178','RemotePort',8866,'LocalPort',8844);%同上
u3=udp('222.20.37.178','RemotePort',8866,'LocalPort',8855);
u1.DatagramReceivedFcn = @instrcallback;%设置u1接收到数据包时,调用回调函数显示
fopen(u1);%打开udp连接(实际上并没有连接,udp是无连接的通信协议)
fopen(u2);%同上
fopen(u3);
fprintf(u2,'data from u2');%主机2(就是udp2)发送文本消息
fscanf(u1)%主机1接收文本消息
fprintf(u3,'data from u3');%主机3(就是udp3)发送文本消息
fscanf(u1)%主机1接收文本消息
u1.Remoteport=8844;%更改目的端口号
fprintf(u1,'u2 reveive data from u1');%向客户机发消息
fscanf(u2)
u1.Remoteport=8855;
fprintf(u1,'u3 reveive data from u1');
fscanf(u3)
fclose(u1);%关闭udp1连接
fclose(u2);%同上
fclose(u3);
delete(u1);%删除udp1连接,释放内存
delete(u2);%同上
delete(u3);
clear u1;%清除工作区中的udp1数据
clear u2;%同上
clear u3;
把IP地址改为自己的IP地址,直接运行即可。
注意:本方法不能进行公网远程通信,具体原因看我这篇文章:
MATLAB实现简单的聊天软件
UDP的公网单向通信,请看这篇文章:
Matlab公网通信的实现(NAT123实现内网穿透)