我是Android编程的新手,我正在尝试将程序从标准java移植到android。这个java应用程序包含套接字。当我移植程序时,如果按下按钮太快,我会拒绝连接。我制作了一个简单的测试程序。
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Socket mySocket = new Socket();
InetSocketAddress address = new InetSocketAddress("10.94.35.24", 5000);
mySocket.connect(address, 5000);
mySocket.shutdownOutput();
mySocket.shutdownInput();
mySocket.close();
Log.w("Socket", "Socket closed");
Socket mySocket2 = new Socket();
mySocket2.connect(address, 5000);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
我在这个IP和端口上启动并运行了一个服务器,我的程序在我的计算机上的java应用程序上运行正常。但是在android上,程序在尝试连接到mySocket2时会遇到以下异常
java.net.ConnectException:无法连接到/10.94.35.24(端口 5000)5000ms后:isConnected失败:ECONNREFUSED(连接 拒绝)
我的猜测是,这与Android操作系统的限制有关,但我希望不会。有没有人知道我做错了什么或者可以确认套接字在Android中有这些限制吗?
答案 0 :(得分:0)
public class ConnectException 扩展SocketException
说:表示尝试将套接字连接到远程地址和端口时发生错误。通常,远程拒绝连接(例如,没有进程正在侦听远程地址/端口)。
"Connection Refused"
错误表示服务器计算机上的套接字堆栈收到了您的连接请求,并故意拒绝接受它。出现这种情况的原因有两个:
1)您尝试连接的端口上没有运行侦听套接字。
2)有一个侦听套接字,但其待处理连接的积压已满,因此此时无法为您的请求排队。
要区分这两者,请尝试重新连接几次,并在每次尝试之间延迟。如果你始终得到相同的错误,那么#1可能是罪魁祸首。确保端口号正确无误。如果#2是罪魁祸首,你的重新连接最终有可能成功。