在Android上将图片从Android发送到Matlab

时间:2013-03-18 18:49:31

标签: android matlab image transfer pc

我希望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(Build 7601:Service Pack 1)

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

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

1 个答案:

答案 0 :(得分:1)

通过TCP发送大量数据并立即关闭套接字可能有点“不安全”。查看这篇超级信息丰富的指南 - SO_LINGER - 以及此good answer,了解可能的清洁工作。

一个更简单,更脏的解决方法,如果你能负担得起,只需等待(sleep电话)发送后和socket.close()之前。