MATLAB での簡単 TCP/IP 通信 (Toolbox なし)


経緯

MATLABで刺激制御とオンライン自動解析系を組みたかったので調べた.
記録PCが刺激PCに命令を出す形で計測がスタートする.時間精度がいらない制御なら十分.

クライアント側 (記録PC)
計測担当のPC.刺激PC出して欲しい刺激のIDを送る.
IPはサーバー側PCに設定する.

clear all
jTcpObj = jtcp('request','192.168.1.1', 3000, 'timeout', 2000);
mssg = [];
for i = 1:10
    disp('-------------------')
    disp(['Send: ' num2str(i)])
    jtcp('write', jTcpObj, num2str(i));

    pause(1)
    while isempty(mssg)
        mssg = jtcp('read',jTcpObj);
    end
    disp(mssg)
    mssg = [];
end
jtcp('write', jTcpObj, 'quit');
jtcp('close',jTcpObj);

サーバー側 (刺激PC)
クライアントから刺激IDを受け取って表示する.

clear jTcpObj;
clearvars
i = 1;
disp('Waiting Access from client...')
jTcpObj = jtcp('accept', 3000, 'timeout', 30000);
disp(['Connected: ' jTcpObj.remoteHost])
mssg = [];
while true
    disp('---------------');
    disp(['trial: ' num2str(i) ', waiting stimID ...'])
    while isempty(mssg)
        mssg = jtcp('read',jTcpObj);                
    end
    jTcpObj.outputStream.flush;
    ids{i} = mssg;                
    if strcmp(mssg, 'quit')
        disp('Received "quit" closing socket...')
        jtcp('close',jTcpObj);
        break;        
    end      
    jtcp('write',jTcpObj,['Stim Server Received: "' mssg '"']);

    % stimuli
    disp(['"' mssg '" Start']);    
    pause(2)
    disp(['"' mssg '" Finished']);    

    i = i+1; mssg = []; 
end
disp('')
disp('Session Finished')