【问题标题】:Android as Webservice Server?Android 作为 Web 服务服务器?
【发布时间】:2011-05-30 21:16:33
【问题描述】:

也许与其他人相反,我正在考虑在 Android 上运行 Web 服务服务器。有没有支持这个的库?我认为 ksoap2 例如仅用于使用 Web 服务,而不是为它们提供服务,对吗?

而且,如果没有冗长的编码是不可能的,我只需要在 Android 上运行 HTTP 服务器并接收二进制文件(通过 POST)。

谁能给点提示?

干杯, 马克

【问题讨论】:

    标签: java android web-services http webserver


    【解决方案1】:

    最后,我打消了在 Android 端使用 Web 服务来实现它的想法,而是设法通过 Socket-Communication 和自行设计的协议来实现它,就像这样:

    public class AsyncTaskSocketServer extends AsyncTask<Integer, String, Integer> {
    
    private int id;
    private String TAG = "AsyncTaskSocketServer";
    
    private AsyncTaskSocketServer() {
        super();
        Random generator = new Random();
        id = generator.nextInt();
        Log.d(TAG, "created with id: " + id);
    }
    
    @Override
    protected Integer doInBackground(Integer... ports) {
    
        int port = ports[0];
        Log.v(TAG, "Trying to start on port: " + port + " with id: " + id);
    
        try {
            ServerSocket serverSocket = new ServerSocket(port);
    
            while (!isCancelled()) {
                Socket client = serverSocket.accept();
                try {
                    Log.v(TAG, "Listening on port: "
                            + port);
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(client.getInputStream()));
                    String str = in.readLine();
                    publishProgress(str);
    
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.v(TAG, "Exception while socket.accept"+ id);
                } finally {
                    client.close();
                }
                client.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.v(TAG, "Exception in SocketServer creation" + id);
        }
        return port;
    }
    
    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        String message = values[0];
        try {
            NetworkQueue.MESSAGE_IN_QUEUE.put(message);
            Log.v(TAG, "received: " + message);
        } catch (Exception e) {
            Logger.log("AsyncTaskSocketServer: Exception while writing to IN_QUEUE");
        }
    }
    }
    

    【讨论】:

      【解决方案2】:

      http server android的第一个结果:http://code.google.com/p/i-jetty/

      【讨论】:

      • 已经看到了,谢谢。但它是否支持 Web 服务创建和/或覆盖某些方法,如 HTTPServlet 中的 doGET?据我所知,这只是一个独立的应用程序,而不是一个可用的库。作为最后的手段,我可​​以查看源代码并构建自己的 Web 服务器,但我目前正在寻找最简单的解决方案。
      【解决方案3】:

      您基本上可以做到这一点,但如果没有 root,您将无法绑定特权端口,例如端口 80,或设置 OOM 杀手值以优先保留您的服务器而不是其他可能需要内存的东西。

      当然,除非上游 wifi 或 3g 提供商愿意为您提供感兴趣的客户可路由的 IP 地址,否则您将无能为力。

      【讨论】:

      • 如何?动态IP没问题,端口可以是18384等。
      • 与在任何其他 linux 上的操作相同,如果移植复杂的服务器,会产生一些令人头疼的构建系统 - 所以选择一个没有复杂构建系统的相当轻量级的解决方案。
      • 抱歉,这对我来说太抽象了。我需要一个具体的解决方案。如果您说“就像在任何其他 linux 上一样”,那么我必须说我刚刚在 linux 上创建了一个简单的网络服务器,其中包含近 10 行代码 - 使用 python。所以 linux 与否无关...我需要 Python 上的 HTTPServer 之类的东西,但对于 Java。
      • 你的十行 python 可能会工作,虽然部署起来会比 java 中类似的简短解决方案更棘手,我相信你可以很快想出。 Stack Overflow 不是自定义解决方案工厂,它是进行一些个人研究之后提出问题的地方。
      • 是的,我仍然确信我可以在 Java 中提出一个简短的解决方案,但我还没有找到它。我现在至少尝试了 2 天,所以我想已经进行了一些研究工作。无论如何,感谢您的建设性和准确的帮助。
      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2013-05-23
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多