从Android/Java向Matlab发送数据

Gha*_*ion 9 java matlab android json restful-architecture

我花了一些时间寻找一种方法将数据从Android应用程序发送到Matlab - 没有办法.我更喜欢通过Restful webservice使用JSON.

我可能有错误的概念,这是如何工作的.

Matlab应该运行/等待来自我的Android设备的POST请求以接收数据,将其从json转换为matlab形式,进行并发送回来 - 而不是再次等待新请求.

像"webread"这样的"RESTful web服务"似乎不会等待传入数据并为它们激活.


如何让Matlab用json监听传入的数据?或者如何让Matlab从基于Android/Java的程序接收数据?我是否需要其他框架,api甚至是带数据库的服务器才能完成这项工作?

任何人都可以给我一些提示吗?

Kev*_*n91 5

方法1:

Matlab还提供了Matlab Mobile https://de.mathworks.com/products/matlab-mobile.html,它能够从您的设备执行Matlab代码,但是,无法将图像发送到Matlab.

但是,您可以使用WebCam https://play.google.com/store/apps/details?id=com.pas.webcam&hl=en并打开服务器,这非常简单.您可以在后台运行应用程序,然后通过Matlab-Mobile连接到Matlab,并通过您的IP地址和端口8080访问它.

方法2:

您可以使用此处实现的WebSocket -Server:

https://de.mathworks.com/matlabcentral/fileexchange/50040-jebej-matlabwebsocket

有关如何运行它的更多信息,您可以按照GitHub自述文件中给出的说明进行操作:https://github.com/jebej/MatlabWebSocket

WebSocket服务器位于OSI模型https://en.wikipedia.org/wiki/OSI_model的第7层(应用程序层)的最高层,并在第4层(TCP)上构建op.但是,您不需要指定缓冲区大小等内容.

以下示例代码直接取自GitHub项目的示例代码.要在Android应用程序中实现预期结果,这是在Android上重建客户端应用程序的最佳方法.

回声服务器:

classdef EchoServer < WebSocketServer
    %ECHOSERVER Summary of this class goes here
    %   Detailed explanation goes here

    properties
    end

    methods
        function obj = EchoServer(varargin)
            %Constructor
            obj@WebSocketServer(varargin{:});
        end
    end

    methods (Access = protected)
        function onOpen(obj,conn,message)
            fprintf('%s\n',message)
        end

        function onTextMessage(obj,conn,message)
            % This function sends an echo back to the client
            conn.send(message); % Echo
        end

        function onBinaryMessage(obj,conn,bytearray)
            % This function sends an echo back to the client
            conn.send(bytearray); % Echo
        end

        function onError(obj,conn,message)
            fprintf('%s\n',message)
        end

        function onClose(obj,conn,message)
            fprintf('%s\n',message)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

要在MATLAB中运行它:

s = EchoServer(30000);
Run Code Online (Sandbox Code Playgroud)

然后,这将使用本地计算机上的端口30000.

在Android上,只需创建一个WebSocket-Client并使用您的URI,您可以使用ipconfig(windows)或ifconig(Linux)找到它.在Android中,uri应该喜欢以下内容:

ws://192.168.1.102:30000 
Run Code Online (Sandbox Code Playgroud)

IP地址可能根据您的IP地址而变化的地方