Matlab探尋(二):和Android進行TCPIP通信(java.net.Socket)

  兩個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!

發佈了29 篇原創文章 · 獲贊 59 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章