首页 > 解决方案 > Matlab TCP/IP 服务器套接字不发送准确的数据

问题描述

我正在使用 Matlab R2019A 文档中关于 TCP/IP 连接的示例,通过 TCP 来回发送两个 Matlab 实例的数据。

https://www.mathworks.com/help/instrument/communicate-using-tcpip-server-sockets.html

我有一个 TCP 客户端(client.m)文件,写成:

    data = sin(1:64);
    plot(data);
    t = tcpip('localhost', 30000, 'NetworkRole', 'client');
    fopen(t)
    fwrite(t, data)

和一个 TCP 服务器 (server.m) 文件,写成:

    t = tcpip('0.0.0.0', 30000, 'NetworkRole', 'server');
    fopen(t);
    data = fread(t, t.BytesAvailable);
    plot(data);

但是,从客户端发送的数据是一个double数组,而接收到的数据是一个integer数组。

发送的数据如下图所示: 数据发送 而接收的数据如下图所示: 收到的数据

如何确保发送的数据按原样接收?

标签: matlabtcp

解决方案


我认为您需要做的是还指定发送和接收数据的精度(以确保正确解释字节):

% to send 
fwrite(t, data, 'double');

% to receive 1000 doubles
data = fread(t, 1000, 'double');

这至少是 Mathworks 所建议的。请参阅部分 Reading binary data以及freadfwrite的文档。


推荐阅读