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

来源:互联网 发布:网络大电影拍摄时间 编辑:程序博客网 时间:2024/06/05 01:18

  两个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);    endend

  这里调用了两个和TCPSocket有关的java类 java.net.Socket 和 java.io.*。该函数最终实现的功能是:给Android发送字符串数据,函数的输入量即为要发送的数据

主函数

  在matlab里调用上面的客户端函数,代码如下:

global client_socketglobal IsSocketOpenedclient_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!