Android에서 HTTP 서버를 만드는 방법은 무엇입니까? [닫은]


116

클라이언트에 일부 콘텐츠를 제공하기 위해 Android에서 간단한 HTTP 서버를 만들고 싶습니다.

서버를 구축하거나 기존 라이브러리를 사용하는 방법에 대한 조언이 있습니까?


웹 서버 만 있으면이 튜토리얼을 확인할 수 있습니다. devlper.com/2010/12/… 및 샘플 : code.google.com/p/krvarma-android-samples/source/browse/… . 둘 다 매우 오래되었지만 약간의 조정 후에도 여전히 잘 작동합니다.
안드로이드 개발자

답변:


131

https://github.com/NanoHttpd/nanohttpd를 고려 하십시오 . 자바로 작성된 매우 작습니다. 문제없이 사용했습니다.


놀랄 만한. 아마도 한 달의 작업을 절약 할 수 있습니다. 상용 제품에 사용할 수 있습니까?
Ivan G.

수정 된 BSD 라이센스에 대해 읽어야합니다. 상용 제품에서 코드 사용을 허용하는지 여부.
damluar

2
내 html 페이지에 이미지를 표시 할 수없는 것 같습니다. 이미지를 표시하려면 html에서 어떤 디렉토리를 사용해야합니까? 감사.
Shane Oliver

이미지 경로는 html 페이지를 상대적으로 다시 작성합니다. 그것은 http 서버의 문제가 아니라 나쁜 html입니다 ..
damluar

현재 homeDir에 추가중인 파일을 제공 할 수 있습니까? 예를 들어, homeDir에 f1이라는 파일을 복사하고 있습니다 (javacode 사용). 이제 파일 복사가 진행 중이며 누군가가 파일에 대한 요청을 보내면 f1 서버가 요청을 처리 할 수 ​​있습니까?
애쉬 윈 N Bhanushali

23

NanoHttpd는 Android의 매력처럼 작동합니다. 우리는 사용자의 손에 코드가 만들어져 있습니다.

이 라이선스는 "바이러스"에 영향을주지 않고 NanoHttpd의 상업적 사용을 절대적으로 허용합니다.


1
사용 방법에 대한 튜토리얼 / 샘플은 어디에서 찾을 수 있습니까? 예를 들어 다른 사람이 다운로드 (또는 스트리밍) 할 수 있도록 장치에있는 파일을 제공하려면?
안드로이드 개발자

9

이것은 JavaSE에서와 마찬가지로 ServerSocket을 사용하여 수행 할 수 있습니다 . 이 수업은 Android에서 사용할 수 있습니다. android.permission.INTERNET필수입니다.

더 까다로운 부분은 ServerSocket에서 별도의 스레드 대기가 필요하고 해당 accept메서드 에서 제공되는 하위 소켓을 서비스하는 것입니다 . 또한 필요에 따라이 스레드를 중지하고 다시 시작해야합니다. 가장 간단한 방법은 ServerSocket을 닫아 대기중인 스레드를 죽이는 것 같습니다. 활동이 최상위에있을 때만 서버가 필요한 경우 ServerSocket 스레드를 시작하고 중지하는 것은 활동 수명주기 메서드에 다소 우아하게 연결될 수 있습니다. 또한 서버에 여러 사용자가있는 경우 분기 된 스레드에서 요청을 처리하는 것이 좋습니다. 사용자가 한 명뿐이면 필요하지 않을 수 있습니다.

사용자에게 서버가 수신하는 IP를 알려야하는 경우 NetworkInterface .getNetworkInterfaces ()를 사용하면 이 질문 이 추가 트릭을 알려줄 수 있습니다.

마지막으로, 여기 에는 매우 짧고 간단하며 완성 된 최종 사용자 애플리케이션보다 이해하기 쉬울 수있는 완전한 최소 Android 서버가 있으며 다른 답변에서 권장됩니다.


6

http://tjws.sf.net 시도해 볼 수있는 다른 서버는 실제로 이미 Android 지원 버전을 제공합니다.


1
이것은 안드로이드 표준 (100kb)에 의해 뚱뚱합니다. 단순한 파일 서비스 또는 앱에 대한 원격 구성 / 디버그 / 상태 인터페이스가 아닌 Java에서 심각한 서버를 원하는 경우 좋습니다.
ahcox 2012


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.