两个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!