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 バージョン: 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) クライアント VM 混合モード
MATLAB バージョン 8.1 (R2013a) Computer Vision System Toolbox バージョン 5.2 (R2013a) Image Acquisition Toolbox バージョン 4.5 (R2013a) Image Processing Toolbox バージョン 8.2 (R2013a) Instrument Control Toolbox バージョン 3.3 (R2013a) MATLAB Coder バージョン 2.4 (R2013a)