兩個Matlab之間進行Tcpip通信是很簡單的,直接調用matlab中的tcpip()函數就行了。但是由於項目需要,Matlab要和Android設備進行Tcpip通信,tcpip()函數就不能用了,所以本文在Matlab中調用java的類來實現。關於在matlab調用java類進行TCPip通信可以參考[TCP/IP Socket Communications in MATLAB using Java Classes]
客戶端
Matlab作爲客戶端(client),Android設備作爲服務器(server)。Matlab客戶端函數如下:
function ClientSend(message)
import java.net.Socket
import java.io.*
global client_socket
global IsSocketOpened
host = '172.22.37.3'; %%Android設備的IP地址
port = 8000; %%端口號
fprintf(1, 'connecting to %s:%d\n', host, port);
try
if IsSocketOpened == 0
client_socket = Socket(host, port);
IsSocketOpened = 1;
end
output_stream = client_socket.getOutputStream;
d_output_stream = PrintStream(output_stream);
fprintf(1, 'Writing %d bytes\n', length(message))
d_output_stream.println(message);
catch
if ~isempty(client_socket)
client_socket.close;
end
s = lasterror
pause(1);
end
end
這裏調用了兩個和TCPSocket有關的java類 java.net.Socket 和 java.io.*。該函數最終實現的功能是:給Android發送字符串數據,函數的輸入量即爲要發送的數據
主函數
在matlab裏調用上面的客戶端函數,代碼如下:
global client_socket
global IsSocketOpened
client_socket = [];
IsSocketOpened = 0;
while true
a = input('input your command:','s');
ClientSend(a);
pause(1);
end
這裏定義了兩個全局變量client_socket和IsSocketOpened,主要是防止客戶端重複連接。
運行結果
下載個Android“網絡調試助手”,Android和Matlab處於同一局域網,配置Android設備爲tcp server,注意地址和端口號。我這裏是“172.22.37.3:8000”。
運行Matlab程序,輸入我們要發送的字符串:
可以看到Android設備接收到了我們從Matlab發送過來的數據:
到這裏,我們就成功實現了Matlab和Android設備的TCPIP通信!接下來就可以自己編寫Android代碼,同時實現和Matlab的雙向通信。
Well done!