实现vs和matlab本机TCPIP通信

本文介绍如何实现在Visual Studio中通过TCP/IP协议将数据传输到Matlab。由于Matlab默认接收缓冲区限制,需要对数据传输方式进行调整。在Matlab客户端,数据从ASCII码转为十六进制再还原为double类型。C++服务器端则通过union将double转换为固定长度的char数组进行传输。程序执行过程中,确保服务端和客户端IP及端口一致,以实现数据的正确发送和接收。
摘要由CSDN通过智能技术生成

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值