Visual Studio 与 Matlab 进行TCP/IP 通信传送数据
因工作需要将VS中得到的数据传送到Matlab使用patch()函数画图,从网上看到了相应的方法。但是
Visual Studio C++与Matlab进行TCP/IP通信传送double类型数据
如文中所说Matlab默认的接收缓冲区是 512字节,所以如果matlab那边不做处理,C++那边一次最多传送64个数字。不满足实验需要,我需要传送stl模型中各个三角面片的点坐标,一次至少需要传输上千个数字。所以在这个基础上对代码进行了一些更改。
Matlab Client端
Matlab端作为客户端,由于传过来的是一堆 ACSII 码 (即 recv),所以先将这些码转换成 十六进制(dec2hex)的,然后横向展开,每十六位进行一次分割,然后再转换回 double (hex2num)。
clear
clc
close all
warning off all
%% 设置连接参数,要连接的地址为127.0.0.1(即本地主机),端口号为5000,作为客户机连接。
Client=tcpip('127.0.0.1',5000,'NetworkRole','client');
Client.InputBufferSize = 200000; %设置Client的输入缓存大小,大小至少为size * 8
Client.BytesAvailable
%% 建立连接,建立完成后进行下一步,否则报错
fopen(Client);%与一个服务器建立连接,直到建立完成返回,否则报错。
sprintf('成功建立连接')
%% 发送字符串
sendtxt = 'hello hello';
fprintf(Client,sendtxt);
%% 接收字符串
Client.BytesAvailable
pause(1);
recv=fread(Client,18816,'char');
%sizeA至少为所需传递的double类型的个数乘以8 [2352*8=18816]
recv1 = dec2hex(recv);
recv2 = [];
for i = 1:length(recv1)
recv2 = [recv2,recv1(i,:)]; %小端模式
end
count = 0;
recv3 = []; %转化成double
while count < length(recv1)/8
recv3 = [recv3,hex2num(recv2(count*16+1:count*16+16))];
count = count + 1;
end