Como criar um servidor HTTP no Android? [fechadas]

116

Eu gostaria de criar um servidor HTTP simples no Android para servir algum conteúdo a um cliente.

Algum conselho sobre como construir o servidor ou usar qualquer biblioteca existente?

biquillo
fonte
se tudo o que você deseja é um servidor web, você pode verificar este tutorial: devlper.com/2010/12/… e seu exemplo: code.google.com/p/krvarma-android-samples/source/browse/… . ambos são muito antigos, mas após alguns ajustes ainda funcionará bem.
desenvolvedor Android de

Respostas:

131

Considere este: https://github.com/NanoHttpd/nanohttpd . Muito pequeno, escrito em Java. Usei sem nenhum problema.

Damluar
fonte
Surpreendente. Provavelmente economizou um mês de trabalho. Você pode usá-lo em um produto comercial?
Ivan G.
Você deve ler sobre a licença BSD modificada. Se permite a utilização de código em produto comercial ou não.
damluar de
2
Não consigo exibir imagens na minha página html. Qual diretório deve ser usado no html para que as imagens sejam exibidas? Obrigado.
Shane Oliver
o caminho para as imagens é relativo em relação à página html. não é um problema de servidor http, é html ruim ..
damluar
Posso servir um arquivo que está sendo adicionado ao homeDir. Por exemplo, estou copiando um arquivo chamado f1 em homeDir (usando javacode). Agora a cópia do arquivo está em andamento e se alguém enviar uma solicitação para o arquivo f1 O servidor pode processar a solicitação?
Ashwin N Bhanushali
23

O NanoHttpd funciona perfeitamente no Android - temos código em produção, nas mãos dos usuários, que é construído sobre ele.

A licença permite absolutamente o uso comercial do NanoHttpd, sem quaisquer implicações "virais".

Paul Hawke
fonte
1
Onde posso encontrar um tutorial / amostra de como usá-lo? por exemplo, para servir um arquivo localizado no dispositivo, para que outros possam baixá-lo (ou transmitir a partir dele)?
desenvolvedor de Android de
9

Isso pode ser feito usando ServerSocket , o mesmo que em JavaSE. Esta aula está disponível no Android. android.permission.INTERNETÉ necessário.

A única parte mais complicada é que você precisa de uma espera de thread separada no ServerSocket, atendendo a sub-soquetes que vêm de seu acceptmétodo. Você também precisa parar e retomar este tópico conforme necessário. A abordagem mais simples parece matar o thread de espera fechando o ServerSocket. Se você só precisa de um servidor enquanto sua atividade está no topo, iniciar e parar o encadeamento ServerSocket pode ser elegantemente vinculado aos métodos de ciclo de vida da atividade. Além disso, se o servidor tiver vários usuários, pode ser bom atender solicitações de threads bifurcadas. Se houver apenas um usuário, isso pode não ser necessário.

Se você precisar informar ao usuário sobre os quais IP é a escuta do servidor, utilize NetworkInterface .getNetworkInterfaces (), esta pergunta pode dizer truques extras.

Finalmente, aqui existe possivelmente o servidor Android mínimo completo que é muito curto, simples e pode ser mais fácil de entender do que os aplicativos de usuário final finalizados, recomendados em outras respostas.

Audrius Meskauskas
fonte
6

Outro servidor que você pode tentar http://tjws.sf.net , na verdade já fornece a versão habilitada para Android.

Dmitriy R
fonte
1
Isso é alto para os padrões do Android (100kb). Bom se você deseja um servidor sério em java em vez de apenas um simples serviço de arquivo ou uma interface de configuração / depuração / status remota em seu aplicativo.
ahcox