จะสร้างเซิร์ฟเวอร์ HTTP ใน Android ได้อย่างไร [ปิด]


116

ฉันต้องการสร้างเซิร์ฟเวอร์ HTTP อย่างง่ายใน Android เพื่อให้บริการเนื้อหาบางส่วนแก่ลูกค้า

มีคำแนะนำเกี่ยวกับวิธีสร้างเซิร์ฟเวอร์หรือใช้ไลบรารีที่มีอยู่หรือไม่?


ถ้าสิ่งที่คุณต้องการเป็นเว็บเซิร์ฟเวอร์คุณสามารถตรวจสอบการกวดวิชานี้: devlper.com/2010/12/...และตัวอย่างของ: code.google.com/p/krvarma-android-samples/source/browse/... ทั้งคู่อายุมาก แต่หลังจากปรับแต่งแล้วก็ยังใช้งานได้ดี
นักพัฒนา Android

คำตอบ:


131

พิจารณานี้: https://github.com/NanoHttpd/nanohttpd เล็กมากเขียนด้วยภาษาจาวา ฉันใช้มันโดยไม่มีปัญหาใด ๆ


น่าอัศจรรย์ น่าจะช่วยงานได้หนึ่งเดือน คุณสามารถใช้ในผลิตภัณฑ์เชิงพาณิชย์ได้หรือไม่?
Ivan G.

คุณควรอ่านเกี่ยวกับใบอนุญาต Modified BSD หากอนุญาตให้ใช้รหัสในผลิตภัณฑ์เชิงพาณิชย์หรือไม่
damluar

2
ฉันไม่สามารถแสดงภาพในหน้า html ของฉันได้ ควรใช้ไดเร็กทอรีใดใน html เพื่อให้รูปภาพแสดง ขอบคุณ
Shane Oliver

พา ธ ไปยังรูปภาพมีความสัมพันธ์กับการจัดลำดับหน้า html มันไม่ใช่ปัญหาของเซิร์ฟเวอร์ http เป็น html ที่ไม่ดี ..
damluar

ฉันสามารถให้บริการไฟล์ที่กำลังเพิ่มไปยัง homeDir ได้หรือไม่ ตัวอย่างเช่นฉันกำลังคัดลอกไฟล์ชื่อ f1 ใน homeDir (โดยใช้ 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


3

หากคุณใช้ kotlin ให้พิจารณาไลบรารีเหล่านี้ มันสร้างขึ้นสำหรับภาษา kotlin https://github.com/weeChanc/AndroidHttpServer https://github.com/ktorio/ktor

AndroidHttpServer มีขนาดเล็กมาก แต่คุณลักษณะก็น้อยลงเช่นกัน

Ktor เป็นห้องสมุดที่ดีมากและการใช้งานก็ง่ายเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.