簡體   English   中英

Android Socket連接遭拒絕

[英]Android Socket connection refused

我試圖在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和/或端口有錯誤? 但是,任何人都可以指出我可能是什么原因的正確方向?

由於設備上沒有防火牆,在其清單中聲明網​​絡權限的正確編碼的Android應用程序可以接受未成熟端口上的連接。

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

我在提示符中使用了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());

在我的情況下,我需要重定向端口,看看:

http://developer.android.com/guide/developing/tools/emulator.html#redirections

或者也許您也可以嘗試轉發端口。

從您的代碼中,我假設您正在嘗試從Android應用程序打開到同一Android設備的套接字連接。

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

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

ServerSocket socket = new ServerSocker(8888);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM