2011-05-30 62 views
0

也许与别人相反,我想在Android上运行一个web服务服务器。有没有支持这个的库?我认为ksoap2例如仅用于消费Web服务,而不是服务它们,对吗?Android作为Webservice服务器?

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

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

干杯, 马克

回答

2

最后,从来就解雇与Android设备端web服务实现它的思想和勉强通过套接字的通信和自行设计的协议去做,很喜欢这样的:

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"); 
    } 
} 
} 
0

HTTP服务器的android的第一个结果:http://code.google.com/p/i-jetty/

+0

看到已经,谢谢。但它是否支持Web服务创建和/或在HTTPServlet中重写某些方法,如doGET?据我所见,这只是一个独立的应用程序,而不是一个可用的库。作为最后的手段,我可​​以看看源代码并构建自己的Web服务器,但我目前正在寻找最简单的解决方案。 – stk 2011-05-30 21:40:03

0

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

当然,除非上游wifi或3G提供商愿意为您提供可感兴趣的客户端路由的IP地址,否则您将无法做大量工作。

+0

以及如何?动态IP是没有问题的,并且端口可以是如18384. – stk 2011-05-30 21:37:05

+0

与在任何其他Linux上的方式相同,如果移植复杂的服务器,则会模仿一些构建系统的麻烦 - 所以选择一个相当轻量级的解决方案,该解决方案没有复杂的构建系统。 – 2011-05-30 21:40:11

+0

抱歉,但现在对我来说这太抽象了。我需要一个具体解决方案。如果你说'喜欢任何其他的Linux',那么我得说我刚刚在linux上用近10行代码创建了一个简单的web服务器 - 用python。所以Linux或不是相关的...我需要像python的HTTPServer,但对于Java。 – stk 2011-05-30 21:50:22