2010-03-11 107 views
4

我試圖在Android上打開一個Socket,但每次嘗試時都會收到拒絕連接的錯誤,無論我嘗試什麼方式。Android Socket連接拒絕

錯誤發生在我嘗試創建連接的下面一行代碼中。


Socket socket = new Socket(getLocalIpAddressString(), 8008); 

下面是我用它來獲取本地IP地址的方法:


public static String getLocalIpAddressString() { 
try { 
    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
     NetworkInterface intf = en.nextElement(); 
     for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
      InetAddress inetAddress = enumIpAddr.nextElement(); 
      if (!inetAddress.isLoopbackAddress()) { 
       return inetAddress.getHostAddress().toString(); 
      } 
     } 
    } 
} catch (SocketException ex) { 
    Log.e("IPADDRESS", ex.toString()); 
} 
return null; 

}


而錯誤我得到的是:


WARN/System.err(3574): java.net.ConnectException: /192.168.2.163:8008 - Connection refused 
WARN/System.err(3574):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:237) 
WARN/System.err(3574):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:199) 
WARN/System.err(3574):  at java.net.Socket.startupSocket(Socket.java:734) 
WARN/System.err(3574):  at java.net.Socket.<init>(Socket.java:157) 
WARN/System.err(3574):  at com.networks.phone.engine.SIPEngine.rtpTest(SIPEngine.java:1444) 

我相信與我的Ipaddress:顯示和或端口錯誤?但任何人都可以指出我正確的方向,可能是什麼原因?

+0

你可以遠程登錄的地址和端口號,先來看看會發生什麼。它可能是您連接的實際計算機。 – Steve 2010-03-11 14:40:27

+0

我試圖在實際的Android設備上,所以我不知道該telnet會有多大的幫助? – 2010-03-11 14:50:11

+0

這可能是一個愚蠢的問題,但有什麼東西在設備上的端口8008上監聽? – dweebo 2010-03-11 15:38:47

回答

0

從你的代碼中,我假設你試圖打開從Android應用程序到同一個Android設備的套接字連接。

基於Linux和所有,也許Android有一些防火牆或連接規則,阻止您的套接字連接成功。檢查文檔,它可能是Android配置問題,而不是Java問題。

+0

也許,連接到其他設備可能是一個更好的主意? – 2010-03-11 17:13:44

2

在清單中聲明網​​絡權限的正確編碼的android應用程序可以接受未驅動端口上的連接,因爲設備上沒有防火牆。

但是,許多WiFi和大多數移動網絡都會將設備放置在NAT和外部防火牆之後,因此入站連接嘗試可能永遠無法到達它。

2

我在提示符中使用了ipconfig命令,然後使用「IPv4地址」連接到當前PC。

我已成功連接服務器以及發送&收到的字節。

的Android客戶端代碼:

s = new Socket("192.168.42.85",12345); 

PC服務器端代碼:

socket = ss.accept(); 
InetAddress ia = socket.getInetAddress(); 
System.out.println("Client Address: " + ia.getHostAddress()); 
0

我有同樣的問題。我不得不使用ServerSocket的,而不是插槽的:

ServerSocket socket = new ServerSocker(8888);