如何在Android中创建HTTP服务器?[关闭]


116

我想在Android中创建一个简单的HTTP服务器,以向客户端提供一些内容。

关于如何构建服务器或使用任何现有库的任何建议?


如果您想要的只是一台Web服务器,则可以查看本教程:devlper.com/2010/12/…及其示例:code.google.com/p/krvarma-android-samples/source/browse/…。它们都很老,但是经过一些调整后,仍然可以正常使用。
Android开发人员

Answers:


131

考虑一下这一点:https : //github.com/NanoHttpd/nanohttpd。很小,用Java编写。我使用它没有任何问题。


惊人。大概节省了一个月的工作。您可以在商业产品中使用它吗?
伊万·G.

您应该阅读有关修改的BSD许可证的信息。是否允许在商业产品中使用代码。
damluar 2011年

2
我似乎无法使图像显示在我的html页面中。html中应使用哪个目录来显示图像?谢谢。
Shane Oliver

图像的路径是相对于html页面的相对路径。这不是http服务器的问题,它是错误的html ..
damluar 2011年

我可以提供当前正在添加到homeDir的文件吗?例如,我正在homeDir中复制一个名为f1的文件(使用javacode)。现在正在复制文件,如果有人发送了对文件f1的请求,服务器可以处理该请求吗?
Ashwin N Bhanushali

23

NanoHttpd在Android上的魅力十足-我们已经在生产代码中,在用户手中建立了代码。

该许可证绝对允许NanoHttpd的商业使用,而没有任何“病毒”的含义。


1
在哪里可以找到有关如何使用它的教程/示例?例如提供位于设备上的文件,以便其他人可以下载文件(或从文件流)?
Android开发人员

9

可以使用ServerSocket来完成此操作,与JavaSE相同。此类在Android上可用。android.permission.INTERNET是必须的。

唯一比较棘手的部分是,您需要在ServerSocket上等待一个单独的线程,以服务来自其accept方法的子套接字。您还需要根据需要停止并恢复该线程。最简单的方法似乎是通过关闭ServerSocket来杀死正在等待的线程。如果您仅在活动处于顶部时才需要服务器,则可以将ServerSocket线程的启动和停止与活动生命周期方法紧密地联系在一起。同样,如果服务器有多个用户,则最好在派生线程中处理请求。如果只有一个用户,则可能没有必要。

如果需要告诉用户服务器正在侦听哪个IP,请使用 NetworkInterface .getNetworkInterfaces(),此问题可能会告诉您其他技巧。

最后,这里可能有一个完整的最小Android服务器,它非常简短,简单,并且比最终用户应用程序更容易理解,在其他答案中建议这样做。


6

您可以尝试http://tjws.sf.net的另一台服务器,实际上它已经提供了启用Android的版本。


1
按照Android标准(100kb),这太胖了。如果您想要使用Java而不是简单的文件服务或应用程序中的远程config / debug / status界面使用严肃的服务器,则很好。
ahcox 2012年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.