#python3 服务端
%MATLAB 客户端
python3发送数据:
DUOJIAO=[323,532]
s=str(DUOJIAO)
connection.send(bytes(s, encoding = "utf8"))#发送数据 字节数组
MATLAB接受数据:
receive = fread(t,nBytes);%读取tcp服务器传来的数据
data=str2num(char(receive(2:end-1)')); %将ASCII码转换为str,再将str转换为数组 ()'不知是什么意思
data
data打印出来是[323,532],data[1]是323,这些没问题。
问题发生在MATLAB发送数据,python3接受数据!!
MATLAB发送数据:
ship_data=[5465 465];
fopen(t);
ship_data = num2str(ship_data);
class(ship_data)
fwrite(t,ship_data);%发送一段数据给tcp服务器。服务器好知道matlab的ip和端口
python3接受数据:
buf = connection.recv(65536)#接收数据,并存入buf 40960表示接收数据大小 buf是bytes类
print(buf)
ship_data = buf.decode('utf8')
打印ship_data[0]居然是5,ship_data[1]是4,而不是我想要的ship_data[0]=5465。
这里只能强行解释一波了,matlab采用ansi编码,
python编码后,即bytes(s, encoding = "utf8")后,打印为 b'[323, 532]',里面的元素323和532是分开的整体,故可以按照索引正常取值。
matlab编码后,即ship_data = num2str(ship_data),python收到的数据打印为 b'5465 465',它把整个矩阵当成了一个字符串,因此取值智能一个字符一个字符取值。
综上,出现此类问题是由于编码风格不同。
python中是用' '将各部分分开,所有就要用到切片函数,ship_data = ship_data.split(" "),即可以解决问题。