在两台电脑之间实现数据传输TCP——通过matlab

基于MATLAB的TCP实现两台电脑之间数据的传输,接收数据电脑设置为服务机,发送数据电脑设置为客户机,两台电脑同时连上局域网(热点)之后,查看两台电脑的IP地址,MATLAB中调用tcpip函数,由于MATLAB通用端口为80,设置端口80,设置发送/接受缓存区后,即可实现通信(用校园网之类的不行),相互传输数据。
在这里插入图片描述
(该图为网图,非本人所画)

上代码:

%% 主机
t_server=tcpip('0.0.0.0',30000,'NetworkRole','server');%与第一个请求连接的客户机建立连接,端口号为30000,类型为服务器。
t_server.InputBuffersize=200000;%设置最大缓冲区
fopen(t_server);%打开服务器,直到建立一个TCP连接才返回;
try_times=100;%尝试读取缓冲区数据的次数,可随意设置;
for i=1:try_times
    pause(0.02);%每次读取之前等待0.02s,随意设置
    try     %因为fread()在缓冲区没有数据的时候读取会报错,因此用try—catch语句忽略这种错误,直到读取到数据。
        data_recv=fread(t_server,t_server.BytesAvailable);%从缓冲区读取数字数据
    catch
        t_server.ValuesReceived;%查看读取出的数据数量,如果没有读到,返回0;
    end
end
disp(data_recv');%数据是一个个传输的,读取的数据是也一个个读取的,是列数据,转置变成行数据更好显示
%% 客户机
%% 客户机
echotcpip('off')
echotcpip('on',80)
t_client=tcpip('192.168.3.83',30000,'NetworkRole','client');%与本地主机建立连接,端口号为30000,作为客户机连接。
% t_client=tcpip('192.168.43.146',80,'NetworkRole','client');
% set(t_client,'InputBufferSize',4500000);
% set(t_client,'OutputBufferSize',300);
set(t_client,'Timeout',300);
fopen(t_client);%与一个服务器建立连接,直到建立完成返回,否则报错。
data_send=[5 7 4 0 1 2 1 4 3 7 2 7 9];%发送的数字数据。
pause(1);%等待连接稳定,随意设置。
fwrite(t_client,data_send);%写入数字数据
fclose(t_client);
echotcpip('off')
data_send

代码灵感来源:https://blog.csdn.net/qq_18820125/article/details/88391596
可以在一台电脑上同时运行两个matlab(先运行主机,再运行客户机),检查传输效果:
在这里插入图片描述
如何查看ip地址:(上文的:‘192.168.3.83’)——主机的
同时按住win+r
输入cmd,确定
在这里插入图片描述
找到IPv4地址,即是需要的ip地址:
在这里插入图片描述

  • 3
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Boost库中的Asio模块来实现两台电脑之间的连接与消息传输。下面是一个简单的示例代码,演示了如何在两台电脑之间建立TCP连接并传输消息。 首先,确保你已经安装了Boost库,并将其包含在你的代码中。 ```cpp #include <iostream> #include <boost/asio.hpp> using boost::asio::ip::tcp; int main() { try { // 创建一个io_context对象 boost::asio::io_context io_context; // 创建一个TCP socket tcp::socket socket(io_context); // 解析服务器的IP地址和端口号 tcp::resolver resolver(io_context); auto endpoints = resolver.resolve("服务器IP地址", "端口号"); // 连接到服务器 boost::asio::connect(socket, endpoints); // 发送消息 std::string message = "Hello, server!"; boost::asio::write(socket, boost::asio::buffer(message)); // 接收响应 char reply[1024]; size_t reply_length = boost::asio::read(socket, boost::asio::buffer(reply, message.size())); std::cout << "Reply from server: "; std::cout.write(reply, reply_length); std::cout << std::endl; } catch (std::exception& e) { std::cerr << e.what() << std::endl; } return 0; } ``` 在代码中,你需要将"服务器IP地址"替换为实际的服务器IP地址,"端口号"替换为实际的端口号。首先,创建一个io_context对象来处理底层网络操作。然后,创建一个TCP socket,并通过resolver解析服务器的地址和端口。接下来,使用socket连接到服务器。发送消息时,使用boost::asio::write函数发送数据,接收响应时,使用boost::asio::read函数接收数据。 请记住,这只是一个基本的示例,你可能需要根据你的具体需求进行修改和扩展。此外,你还需要在服务器端实现相应的逻辑来处理接收到的消息。 希望这可以帮助到你!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值