Jak stworzyć serwer HTTP w systemie Android? [Zamknięte]

116

Chciałbym stworzyć prosty serwer HTTP w Androidzie do udostępniania treści klientowi.

Masz jakieś rady dotyczące budowy serwera lub korzystania z istniejącej biblioteki?

biquillo
źródło
jeśli chcesz tylko serwera WWW, możesz sprawdzić ten samouczek: devlper.com/2010/12/... i jego przykład: code.google.com/p/krvarma-android-samples/source/browse/… . oba są bardzo stare, ale po kilku poprawkach nadal będą działać dobrze.
programista Androida

Odpowiedzi:

131

Rozważ to: https://github.com/NanoHttpd/nanohttpd . Bardzo mały, napisany w Javie. Użyłem go bez problemu.

damluar
źródło
Niesamowity. Prawdopodobnie zaoszczędził miesiąc pracy. Czy możesz go użyć w produkcie komercyjnym?
Ivan G.,
Powinieneś przeczytać o zmodyfikowanej licencji BSD. Czy pozwala na użycie kodu w produkcie komercyjnym, czy nie.
damluar,
2
Nie mogę wyświetlać obrazów na mojej stronie HTML. Jaki katalog powinien być używany w HTML, aby obrazy były wyświetlane? Dzięki.
Shane Oliver
ścieżka do obrazów jest względna w odniesieniu do ponownego ładowania strony html. to nie jest problem z serwerem http, to zły html ..
damluar
Czy mogę udostępnić plik, który jest aktualnie dodawany do katalogu homeDir. Na przykład kopiuję plik o nazwie f1 w homeDir (używając javacode). Teraz trwa kopiowanie pliku i jeśli ktoś wyśle ​​żądanie pliku f1 Czy serwer przetworzy żądanie?
Ashwin N Bhanushali
23

NanoHttpd działa jak urok na Androida - mamy kod w produkcji, w rękach użytkowników, który jest na nim zbudowany.

Licencja absolutnie zezwala na komercyjne wykorzystanie NanoHttpd, bez żadnych implikacji „wirusowych”.

Paul Hawke
źródło
1
Gdzie mogę znaleźć samouczek / przykład, jak go używać? na przykład do obsługi pliku znajdującego się na urządzeniu, aby inni mogli go pobrać (lub z niego przesyłać strumieniowo)?
programista Androida
9

Można to zrobić za pomocą ServerSocket , tak samo jak w JavaSE. Ta klasa jest dostępna na Androida. android.permission.INTERNETjest wymagane.

Jedyną trudniejszą częścią jest to, że potrzebujesz oddzielnego oczekiwania wątku na ServerSocket, obsługującego gniazda podrzędne, które pochodzą z jego acceptmetody. W razie potrzeby musisz również zatrzymać i wznowić ten wątek. Najprostsze podejście wydaje się zabijać oczekujący wątek, zamykając ServerSocket. Jeśli potrzebujesz serwera tylko wtedy, gdy Twoja aktywność jest na szczycie, uruchamianie i zatrzymywanie wątku ServerSocket można dość elegancko powiązać z metodami cyklu życia działania. Ponadto, jeśli serwer ma wielu użytkowników, dobrze jest obsługiwać żądania w rozwidlonych wątkach. Jeśli jest tylko jeden użytkownik, może to nie być konieczne.

Jeśli chcesz powiedzieć użytkownikowi, na którym adresie IP nasłuchuje serwer, użyj NetworkInterface .getNetworkInterfaces (), to pytanie może podpowiedzieć dodatkowe sztuczki.

Wreszcie, tutaj jest możliwie pełna minimalny serwer Android, który jest bardzo krótkie, proste i mogą być łatwiejsze do zrozumienia niż gotowych aplikacji użytkownika końcowego, zalecanych w innych odpowiedzi.

Audrius Meskauskas
źródło
6

Inny serwer, który możesz wypróbować http://tjws.sf.net , w rzeczywistości zapewnia już wersję obsługującą Androida.

Dmitriy R.
źródło
1
To jest grube według standardów Androida (100kb). Dobrze, jeśli chcesz mieć poważny serwer w Javie, a nie tylko proste udostępnianie plików lub zdalny interfejs konfiguracji / debugowania / statusu w Twojej aplikacji.
ahcox