如何在Android流式套接字连接上获得超时异常?

时间:2013-09-27 11:57:50

标签: java android sockets timeout

我一直在编写一个需要连接到TCP服务器的应用程序。 当它无法连接到服务器端端口时,我一直试图让代码的这一部分发出某种异常。 我知道它无法连接因为我关闭了我的服务器并且端口被阻止了。

这是我到目前为止所做的:

public void run()
{
    mRun = true;
    try
    {
        InetAddress serverAddr = InetAddress.getByName(SERVERIP);
        Socket socket = new Socket(serverAddr, SERVERPORT);
        try
        {
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

...

在任何情况下,我的代码最终都被卡在新的Socket()构造函数上,并且它不会抛出任何IO异常。 到目前为止我已经尝试了

socket.setSoTimeout(timeout);

但它没有任何区别。

关于我可以采取哪些行动的想法?

2 个答案:

答案 0 :(得分:2)

尝试:

socket = new Socket();
socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout);

答案 1 :(得分:1)

SO_TIMEOUT设置仅影响从套接字读取,而不影响初始连接。您可以通过创建未连接的套接字然后使用允许connect参数的timeout方法来使连接超时:

Socket socket = new Socket();
socket.connect(new InetSocketAddress(serverAddr, SERVERPORT), timeout);