代码之家  ›  专栏  ›  技术社区  ›  Donal Rafferty

Android套接字连接被拒绝

  •  4
  • Donal Rafferty  · 技术社区  · 14 年前

    我试图在Android上打开一个套接字,但每次我尝试时,无论我用什么方式尝试,我都会不断得到拒绝连接的错误。

    错误发生在我尝试创建连接的下面一行代码上。


    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)
    

    我认为我的IP地址和/或端口有错误?但是,有人能给我指出正确的方向吗?原因可能是什么?

    5 回复  |  直到 7 年前
        1
  •  0
  •   Olivier Croisier    14 年前

    根据你的代码,我假设你试图打开一个从Android应用到同一个Android设备的套接字连接。

    基于Linux和所有的平台,Android可能有某种防火墙或连接规则阻止您的套接字成功连接。检查文档,它可能是Android配置问题而不是Java问题。

        2
  •  2
  •   Chris Stratton    14 年前

    一个正确编码的Android应用程序在其清单中声明网络权限,因为设备上没有防火墙,所以它可以接受非特权端口上的连接。

    然而,许多WiFi和大多数移动网络将设备置于NAT和外部防火墙之后,因此入站连接尝试可能永远无法到达它。

        3
  •  2
  •   takrl cck    13 年前

    我在prompt中使用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());
    
        4
  •  1
  •   Meriadoc    14 年前

    在我的例子中,我需要重定向端口,看看:

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

    或者您也可以尝试转发端口。

        5
  •  0
  •   Silas    7 年前

    我也有同样的问题。我必须使用serversocket而不是socket:

    ServerSocket socket = new ServerSocker(8888);