3

我希望 Matlab 作为服务器执行,而 Android Java 应用程序作为客户端执行。Android 应该将一个大小为 460K 的字节数组传输到 Matlab。我无法在 Matlab 上正确获取整个数组。在 Matlab 中第一次调用 fread 读取随机数的字节(大约 320K-290K) - 这个数字由 t.BytesAvailable 正确表示。之后 t.BytesAvailable 得到 0 并且无法进一步读取。这是我使用的:

Java客户端代码:

Socket socket = new Socket("10.0.0.2", 3000);
OutputStream out = socket.getOutputStream();
out.write(buffer, 0, 460000);
out.flush();
out.close();
socket.close();

Matlab服务器代码:

t=tcpip('0.0.0.0', 3000, 'NetworkRole', 'server');
set(t, 'InputBufferSize', 500000); 
fopen(t); 
pause(1);
while (get(t, 'BytesAvailable') > 0) 
    display(get(t, 'BytesAvailable'));
    data=fread(t, t.BytesAvailable, 'uint8');
end
fclose(t); 
delete(t); 
clear t 

Matlab版本:

>>版本

MATLAB 版本:8.1.0.604 (R2013a)

操作系统:Microsoft Windows 7 版本 6.1(内部版本 7601:Service Pack 1)

Java 版本:Java 1.6.0_17-b04 与 Sun Microsystems Inc. Java HotSpot(TM) Client VM 混合模式

MATLAB 8.1 版 (R2013a) 计算机视觉系统工具箱 5.2 版 (R2013a) 图像采集工具箱 4.5 版 (R2013a) 图像处理工具箱 8.2 版 (R2013a) 仪器控制工具箱 3.3 版 (R2013a) MATLAB Coder 2.4 版 (R2013a)

4

1 回答 1

1

通过 TCP 发送大量数据并立即关闭套接字可能有点“不安全”。查看这个超级信息指南 - SO_LINGER - 以及这个可能的干净工作的好答案。

如果您负担得起,一个更简单、更脏的解决方法就是sleep在发送之后和之前等待(通过调用)socket.close()

于 2014-04-13T14:42:45.570 回答