有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Androidsocket连接被拒绝

我试图在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)

我想这是我的IP地址和/或端口出错?但有谁能给我指出正确的方向,说明原因是什么


共 (5) 个答案

  1. # 1 楼答案

    我也有同样的问题。我不得不使用ServerSocket而不是Socket:

    ServerSocket socket = new ServerSocker(8888);

  2. # 2 楼答案

    根据你的代码,我假设你正在尝试打开一个从Android应用程序到同一个Android设备的套接字连接

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

  3. # 4 楼答案

    我在提示符中使用了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. # 5 楼答案

    一个经过正确编码的android应用程序在其清单中声明网络权限,可以在未受驱动的端口上接受连接,因为设备上没有防火墙

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