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地址和/或端口出错?但有谁能给我指出正确的方向,说明原因是什么
# 1 楼答案
我也有同样的问题。我不得不使用ServerSocket而不是Socket:
ServerSocket socket = new ServerSocker(8888);
# 2 楼答案
根据你的代码,我假设你正在尝试打开一个从Android应用程序到同一个Android设备的套接字连接
基于Linux和其他所有平台,Android可能有某种防火墙或连接规则,阻止你的套接字成功连接。查看文档,这可能是Android配置问题,而不是Java问题
# 3 楼答案
在我的例子中,我需要重定向端口,看看:
http://developer.android.com/guide/developing/tools/emulator.html#redirections
或者你也可以尝试转发端口
# 4 楼答案
我在提示符中使用了ipconfig命令,然后使用“IPv4地址”连接到当前的PC
我已成功连接服务器并发送&;接收字节数
Android客户端代码:
PC服务器端代码:
# 5 楼答案
一个经过正确编码的android应用程序在其清单中声明网络权限,可以在未受驱动的端口上接受连接,因为设备上没有防火墙
然而,许多wifi和大多数移动网络将设备置于NAT和外部防火墙之后,因此入站连接尝试可能永远无法到达它