也许与其他人相反,我想在Android上运行webservice Server。有没有图书馆支持这个?我认为ksoap2例如仅用于使用Web服务,而不是用于服务它们,对吗?
而且,如果没有冗长的编码就不可能,我只需要在Android上运行HTTP Server并使用它接收二进制文件(通过POST)。
有人可以提供一些提示吗?
干杯, 马克
答案 0 :(得分:2)
最后,我已经驳回了在Android端使用Webservice实现它的想法,并且设法通过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");
}
}
}
答案 1 :(得分:0)
http服务器android的第一个结果:http://code.google.com/p/i-jetty/
答案 2 :(得分:0)
您基本上可以这样做,但是如果没有root,您将无法绑定特权端口(如端口80),或者设置OOM杀手值以优先保留服务器而不是其他可能需要内存的内容。
当然,除非上游wifi或3g提供商愿意为您提供可由目标客户端路由的IP地址,否则您将无法做太多工作。