2011-05-30 35 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