Java Android作为Web服务服务器?
也许与其他人相反,我正在考虑在Android上运行webservice服务器。是否有支持此功能的库?我认为ksoap2只用于消费Web服务,而不是为其提供服务,对吗 而且,如果没有冗长的编码就不可能做到这一点,我只需要在Android上运行一个HTTP服务器并用它接收二进制文件(通过POST) 有人能给点提示吗 干杯,Java Android作为Web服务服务器?,java,android,web-services,http,webserver,Java,Android,Web Services,Http,Webserver,也许与其他人相反,我正在考虑在Android上运行webservice服务器。是否有支持此功能的库?我认为ksoap2只用于消费Web服务,而不是为其提供服务,对吗 而且,如果没有冗长的编码就不可能做到这一点,我只需要在Android上运行一个HTTP服务器并用它接收二进制文件(通过POST) 有人能给点提示吗 干杯, Marchttp服务器android的第一个结果:您基本上可以这样做,但是如果没有root,您将无法绑定特权端口,例如端口80,或者设置OOM killer值来优先保护您的服务器
Marchttp服务器android的第一个结果:您基本上可以这样做,但是如果没有root,您将无法绑定特权端口,例如端口80,或者设置OOM killer值来优先保护您的服务器,而不是其他可能需要内存的东西
当然,除非上游wifi或3g提供商愿意为您提供一个感兴趣的客户可以路由的IP地址,否则您将无法做很多事情。最后,我放弃了在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");
}
}
}
公共类AsyncTaskSocketServer扩展了AsyncTask{
私有int-id;
私有字符串TAG=“AsyncTaskSocketServer”;
专用AsyncTaskSocketServer(){
超级();
随机生成器=新随机();
id=generator.nextInt();
Log.d(标签,“创建时id:+id”);
}
@凌驾
受保护的整数doInBackground(整数…端口){
int端口=端口[0];
Log.v(标签,“尝试在端口上启动:“+port+”,id:“+id”);
试一试{
ServerSocket ServerSocket=新的ServerSocket(端口);
而(!isCancelled()){
Socket client=serverSocket.accept();
试一试{
Log.v(标记“侦听端口:”
+港口);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(client.getInputStream());
字符串str=in.readLine();
出版进度(str);
}捕获(例外e){
e、 printStackTrace();
Log.v(标记“socket.accept时异常”+id);
}最后{
client.close();
}
client.close();
}
}捕获(例外e){
e、 printStackTrace();
Log.v(标记“SocketServer创建中的异常”+id);
}
返回端口;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
字符串消息=值[0];
试一试{
NetworkQueue.MESSAGE\u-IN\u-QUEUE.put(MESSAGE);
Log.v(标签“接收:+消息”);
}捕获(例外e){
log(“AsyncTaskSocketServer:写入IN_队列时发生异常”);
}
}
}
怎么做?动态IP是没有问题的,端口可以是18384。就像在任何其他linux上一样,如果移植一个复杂的服务器,会导致一些构建系统的问题——所以选择一个没有复杂构建系统的相当轻量级的解决方案。抱歉,但这对我来说太抽象了。我需要一个具体的解决方案。如果你说“像在任何其他linux上一样”,那么我必须说我刚刚用python在linux上创建了一个简单的Web服务器,有将近10行代码。所以linux与否并不相关……我需要类似于python上的HTTPServer的东西,但是对于Java来说。您的10行python可能会工作,尽管它的部署要比Java中类似的简短解决方案稍微复杂一些,我相信您可以很快想出。Stack overflow不是一个定制的解决方案工厂,它是一个在做了一些个人研究工作后提出问题的地方。是的,我仍然确信我可以用Java提出一个简短的解决方案,但我还没有找到它。我已经试了至少两天了,所以我想我已经做了一些研究工作。无论如何,谢谢你的建设性和精确的帮助。已经看到了,谢谢。但它是否支持Webservice创建和/或重写某些方法,如HTTPServlet中的doGET?就我所见,这只是一个独立的应用程序,不是一个可用的库。作为最后手段,我可以查看源代码并构建自己的Web服务器,但我目前正在寻找最简单的解决方案。