Android Socket连接遭拒绝

时间:2010-03-11 14:37:43

标签: java android sockets ip-address

我正在尝试在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和/或端口有错误?但是,任何人都能指出我可能是什么原因的正确方向吗?

5 个答案:

答案 0 :(得分:2)

在其清单中声明网​​络权限的正确编码的Android应用程序可以接受未充分利用的端口上的连接,因为设备上没有防火墙。

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

答案 1 :(得分:2)

我在提示符中使用了ipconfig命令,然后使用“IPv4地址”连接到当前的PC。

我已成功连接服务器以及已发送&amp;收到的字节。

Android客户端代码:

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

PC服务器端代码:

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

答案 2 :(得分:1)

就我而言,我需要重定向端口,看看:

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

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

答案 3 :(得分:0)

从您的代码中,我假设您正在尝试从Android应用程序打开到同一Android设备的套接字连接。

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

答案 4 :(得分:0)

我遇到了同样的问题。我不得不使用ServerSocket而不是Socket:

ServerSocket socket = new ServerSocker(8888);