最近的项目需要用MATLAB模拟模拟TCP/IP Server 同局域网中的Client通信,但从网上查了好多教程,都是帮助手册中官方给的实例,官方示例中在2020a版本中是可以正常运行的,如果你使用的是2018b及以前的版本,请继续往后看:
obj1 = instrfind('Type', 'tcpip', 'LocalHost', '192.168.0.120', 'LocalPort', 1680, 'Tag', '');
if isempty(obj1)
obj1 = tcpip('192.168.0.120', 1680, 'NetworkRole', 'server');
else
fclose(obj1);
obj1 = obj1(1)
end
fclose(obj1);
但我运行以后,只能本机模拟client和本机server进行通信,局域网中的其他client根本连不上。经过一天的努力,终于找出原因所在。使原来,使用matlab作为server端进行通信的时候一次只能同一个远程主机通信。所以,要设置远程主机的IP地址和端口号才能进行通信。如果本机(192.168.0.120)要通过端口1680同IP地址为192.168.0.102的client通信的话,代码如下:
obj1 = instrfind('Type', 'tcpip', 'LocalHost', '192.168.0.120', 'LocalPort', 1680, 'Tag', '');
% Create the tcpip object if it does not exist
% otherwise use the object that was found.
if isempty(obj1)
obj1 = tcpip('192.168.0.120', 1680, 'NetworkRole', 'server');
else
fclose(obj1);
obj1 = obj1(1)
end
% Disconnect from instrument object, obj1.
fclose(obj1);
% Configure instrument object, obj1.
set(obj1, 'RemoteHost', '192.168.0.102');
fopen(obj1);
发送数据:
fprintf(obj1, '%s\r\n', '发送的内容');
接收数据:
将接收到的数据保存到dtat1
data1=fscanf(Obj1);
将接收到的数据按 “ , ”分割成多个元胞数组保存到s中:
s=regexp(data1,',','split');
之后,你就可以对它为所欲为了。
后续会介绍server与多个client进行通信的方法。