Mathematica与python的socket通信

由于有时需要将复杂的符号计算的结果传递给python用于时间的仿真控制。通过采用socket的通信能够实现不同程序之间的通信。

这里设置host,IP为127.0.0.1,端口为65435。端口应该大于1023。

Mathematica脚本如下:

Clear["`*"]
socket=SocketConnect[{"127.0.0.1",65435}];
(*设置传输数据*)
m = 2.93232;
x = ToString[m];
Y = x <>" "<> x;

WriteString[socket,Y];(*写入数据*)
message=SocketReadMessage[socket];(*读取数据*)
str = ByteArrayToString[message];
num = StringSplit[str];(*分割字符串*)
Print[ToExpression[num[[1]]]];

python服务端server.py脚本代码如下:

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65435        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            datalist = data.split()
            lenx = len(datalist)
            print('from mm:')
            for i in range(lenx):
                print(float(datalist[i]))
            strx = '12.0 13.0'
            conn.sendall(strx.encode())
s.close()

可以实现简单mathematica与python之间的浮点数组的传输与解析。

posted @ 2020-05-05 19:44  _夜尘  阅读(342)  评论(0)    收藏  举报