它终于来了!!!——Python向MATLAB传递数据

最近在跑算法,用Python写的优化算法,想把最后的数据传递到MATLAB上…找了N多种方法,终于行得通啦!

首先,使用Windows系统的朋友,可以试一下MATLAB中的OPC Toolbox。(听公司大佬说的)。
如果跟我一样,使用Linux系统的话。很遗憾,OPC Toolbox不支持Linux系统。那么可以使用socket通信这种方法。

(代码来源于:某位大佬的博客园,此处是传送门)

Python作为服务端

#对socket进行配置:
tcpsocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #选择 AF_INET 的目的就是使用 IPv4 进行通信
tcpsocket.band(('127.0.0.1',8000))#这里应该填写你要绑定的ip地址和端口号,我这里使用的是本机地址
#设置监听,表示一共可以有3客户端可以对服务器进行连接
sock.listen(3)

a=[1,1,2,3,5] #这里是要发送给MATLAB 的数据

while True:
    s=str(a)# 将发送数据转化为String
    connection,address = sock.accept()# 等待客户请求
    print("client ip is:",address)# 打印客户端地址
    # 接收数据,并存入buf
    buf = connection.recv(40960)
    print(buf.decode('utf-8'))
    connection.send(bytes(s, encoding="utf-8"))# 发送数据
    # 关闭连接
    connection.close()
    time.sleep(1)
    
 # 关闭服务器
sock.close()

MATLAB作为客户端

clc
clear
tcpclient = tcpip('127.0.0.1', 8000, 'Timeout', 60,'OutputBufferSize',10240,'InputBufferSize',10240);%连接这个ip和这个端口的UDP服务器
    fopen(tcpclient);
    fwrite(tcpclient,'please sent');%发送一段数据给tcp服务器。服务器好知道matlab的ip和端口
    while(1) %轮询,直到有数据了再fread
        nBytes = get(tcpclient,'BytesAvailable');
        if nBytes>0
            break;
        end
    end
    receive = fread(tcpclient,nBytes);%读取tcp服务器传来的数据
    %关闭连接
    fclose(tcpclient);
    data=str2num(char(receive(2:end-1)')); %将ASCII码转换为str,再将str转换为数组
    disp(data)
delete(tcpclient);

这样配置后,运行python和matlab代码,就能看到matlab的工作区中有了要传递的数据。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值