java.net.ConnectException: localhost / 127.0.0.1: 8080 - การเชื่อมต่อถูกปฏิเสธ


98

ฉันใช้เซิร์ฟเวอร์ xampp apache เพื่อให้บริการทรัพยากรไปยังแอปพลิเคชันจากเครื่องของฉัน แต่ฉันได้รับข้อผิดพลาดข้างต้น

ฉันมีบางอย่างใน Google ชี้ไปที่วิธีแก้ปัญหาที่เป็นไปได้ที่นี่ http://groups.google.com/group/android-beginners/browse_thread/thread/599a06416fb37b4a

ทางออกสำหรับปัญหาข้างต้นคืออะไร?


1
ใช้ 10.0.2.2 ย้อนกลับไปยัง localhost ของคุณ (127.0.0.1) คุณสามารถอ่านเพิ่มเติมได้ที่นี่Android Emulator Networking
Dmytro Melnychuk

คำตอบ:


294

เนื่องจากคุณไม่ได้ระบุว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์จากอุปกรณ์หรือโปรแกรมจำลองดังนั้นฉันเดาว่าคุณกำลังใช้แอปพลิเคชันของคุณในโปรแกรมจำลอง

หากคุณอ้างอิง localhost ในระบบของคุณจากโปรแกรมจำลอง Android คุณต้องใช้http://10.0.2.2:8080/เนื่องจากโปรแกรมจำลอง Android ทำงานในเครื่องเสมือนดังนั้นที่นี่127.0.0.1หรือlocalhostจะเป็นที่อยู่ย้อนกลับของโปรแกรมจำลองเอง

อ้างถึง: Emulator Networking


ใช่ฉันกำลังทำสิ่งเดียวกัน คุณสามารถอธิบายรายละเอียดได้ไหม จะเปลี่ยนที่อยู่ IP เป็น 10.0.2.2 ได้ที่ไหน นี่คือโฟลเดอร์ที่ฉันพยายามเข้าถึงจากเซิร์ฟเวอร์ xampp localhost: 8080 / aero
pradeep

1
ฉันเข้าใจแล้วเราต้องเปลี่ยนเส้นทางที่กำหนดในแอปพลิเคชันเช่นhttp: // localhost: 8080 / link / to / resource.xmlไปที่http://10.0.2.2:8080/link/to/resource.xml
pradeep

@VikasPatidar คุณช่วยบอกฉันได้ไหมว่าจะเปลี่ยนที่อยู่นี้เป็น 10.0.2.2 ในรหัสของฉันในฐานะมือใหม่ได้ที่ไหน
AndroidOptimist

1
เช่นถ้า URL ของคุณเป็นเหมือนhttp://localhost:8080/Getdata.phpหรือhttp://127.0.0.1:8080/Getdata.phpคุณต้องเปลี่ยนเป็นใช้http://10.0.2.2:8080/Getdata.php
Vikas Patidar

1
แทนที่ 10.0.2.2ด้วย10.0.3.2ถ้าคุณกำลังทำงานบน Genymotion
Jacob R

26

ใน Android

แทนที่: String webServiceUrl = "http://localhost:8080/Service1.asmx"

ด้วย: String webServiceUrl = "http://10.0.2.2:8080/Service1.asmx"

โชคดี!


1
ไฟล์อยู่ที่ไหน
user3475052

19

localhost และ 127.0.0.1 เป็นทั้งสองวิธีในการพูดว่า 'เครื่องปัจจุบัน' ดังนั้น localhost บนพีซีของคุณคือพีซีและ localhost บน Android คือโทรศัพท์ เนื่องจากโทรศัพท์ของคุณไม่ได้ใช้งานเว็บเซิร์ฟเวอร์แน่นอนว่าจะปฏิเสธการเชื่อมต่อ

คุณต้องได้รับที่อยู่ IP ของเครื่องของคุณ (ใช้ ipconfig บน windows เพื่อค้นหา) และใช้แทน 127.0.0.1 สิ่งนี้อาจยังใช้ไม่ได้ขึ้นอยู่กับวิธีการตั้งค่าเครือข่าย / ไฟร์วอลล์ของคุณ แต่นั่นเป็นหัวข้อที่แตกต่างกันอย่างสิ้นเชิง


คุณช่วยอธิบายรายละเอียดเพิ่มเติมได้ไหมว่าต้องแจ้งที่อยู่ IP เครื่องของฉัน
pradeep

2
ถ้าคุณพิมพ์ ipconfig มันจะบอกที่อยู่ IP ของเครื่องของคุณ นี่เป็นที่อยู่ IP ส่วนตัวสำหรับเครือข่ายของคุณดังนั้นจึงสามารถเข้าถึงได้จากอุปกรณ์ที่อยู่ในเครือข่ายเดียวกันเท่านั้นดังนั้น WIFI จึงอาจใช้งานได้ 3G อาจไม่เคยชิน
skorulis

@skorulis ใช่เราต้องตั้ง url ของเครื่องซึ่งแตกต่างจาก 127.0.0.1 เนื่องจากเราเชื่อมต่อกับเครือข่ายในรหัสแอปของเรา
Ravi Yadav

คุณยังสามารถตั้งค่า IP เฉพาะสำหรับคอมพิวเตอร์ของคุณที่เซิร์ฟเวอร์กำลังทำงานอยู่ ใช้ IP นี้ในแอพ Android ของคุณ นั่นดีกว่าเพราะในกรณีที่คุณรีสตาร์ทเราเตอร์หรือคอมพิวเตอร์คุณมักจะได้รับ IP ใหม่สำหรับคอมพิวเตอร์และคุณต้องเปลี่ยนในรหัส
DOUBL3P

12
  1. เพิ่มสิทธิ์อินเทอร์เน็ตในไฟล์ Androidmanifest.xml

ใช้ - อนุญาต android: name = "android.permission.INTERNET

  1. เปิด cmd ใน windows
  2. พิมพ์ "ipconfig" จากนั้นกด Enter
  3. ค้นหาที่อยู่ IPv4 . . . . . . . . . . : 192.168.XX
  4. ใช้ URL นี้ " http: //192.168.XX: your_virtual_server_port / your_service.php "

ขอบคุณสิ่งนี้ใช้ได้กับ NOX emulator และ Xammp
Misam Mehmannavaz

9

คุณต้องใช้ที่อยู่ IP และหมายเลขพอร์ตในพื้นที่ของคุณ (แต่จริง) ดังนี้:

String webServiceUrl = "http://192.168.X.X:your_virtual_server_port/your_service.php"

และตรวจสอบว่าคุณได้ตั้งค่าการอนุญาตอินเทอร์เน็ตภายในไฟล์ Manifest

<uses-permission android:name="android.permission.INTERNET" />


5

หากคุณใช้ localhost ใน url ของคุณและทดสอบแอปพลิเคชันของคุณในโปรแกรมจำลองคุณสามารถแทนที่ที่อยู่ IP ของระบบสำหรับ localhost ใน URL หรือคุณสามารถใช้ 10.0.2.2 แทน localhost

http: //localhost/webservice.phpถึงhttp://10.218.28.19/webservice.php

โดยที่ 10.218.28.19 -> ที่อยู่ IP ของระบบ

หรือ

http: //localhost/webservice.phpถึงhttp://10.0.2.2/webservice.php


4

คุณต้องใช้ที่อยู่ IP ในเครื่องของคุณ: โดยใช้คำสั่ง cmd "ipconfig" และหมายเลขพอร์ตเซิร์ฟเวอร์ของคุณดังนี้:

สตริง webServiceUrl = " http: //192.168.XX: your_local_server_port / your_web_service_name.php "

และตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าการอนุญาตอินเทอร์เน็ตในรายการโครงการของคุณ

มันทำงานได้ดีสำหรับฉัน

โชคดี


3

มันทำงานให้ฉัน ฉันใช้ genymotion สำหรับ Run App

1. ประการแรกฉันถูกตรวจสอบ ip ในเครื่องของฉัน โหมดคำสั่ง goto >> และเขียน ipconfig ตัวอย่าง: Windows 10 >> ค้นหา cmd >> แล้วเขียน ipconfig 2. จากนั้นรับข้อมูล ip ในพื้นที่ของคุณ >>> 3. ใช้ให้ localhost ip และ virtual box ip ของคุณ คุณต้องใช้ virtual box ip สำหรับ genymotion ตรวจสอบภาพหน้าจอด้านล่าง คุณสามารถอยู่ใต้ ip ใดก็ได้ภายใต้เครือข่ายโฮสต์ virtualbox ป้อนคำอธิบายภาพที่นี่


2

การแทนที่ localhost ด้วย 10.0.2.2 นั้นถูกต้อง แต่คุณสามารถเปลี่ยน localhost ด้วย ip ของเครื่องจริงได้ (จะดีกว่าสำหรับวัตถุประสงค์ในการดีบัก) Ofc ถ้า dhcp ให้ ip คุณจะต้องเปลี่ยนทุกครั้ง ...

โชคดี!


0

วิธีแก้ปัญหาง่ายมาก

1เพิ่มสิทธิ์อินเทอร์เน็ตในไฟล์ Androidmanifest.xml

<uses-permission android:name="android.permission.INTERNET" />

[2] เปลี่ยนไฟล์ httpd.config ของคุณ

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

TO

Order Deny,Allow
Allow from all
Allow from 127.0.0.1

And restart your server.

[3] และขั้นตอนที่ไร้เรี่ยวแรงที่สุด สร้างเครือข่ายของคุณให้เป็นเครือข่ายที่บ้านของคุณ

ไปที่แผงควบคุม> เครือข่ายและอินเทอร์เน็ต> เครือข่ายและศูนย์การแบ่งปัน

Click on your Network and select HOME NETWORK

ป้อนคำอธิบายภาพที่นี่

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