2013-09-27 39 views
1

我一直在写一个需要连接到TCP服务器的应用程序。 我一直试图让这部分代码在无法连接到服务器端端口时发出某种异常。 我知道它无法连接,因为我关闭了我的服务器并且端口被阻塞。如何获取Android流式套接字连接上的超时异常?

这是我到目前为止有:

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); 

但它并没有区别。

关于我可以采取的行动的任何想法?

回答

1

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

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

这似乎是工作。不能相信我没有注意到我可以做到这一点。 – Arnon

2

尝试:

socket = new Socket(); 
socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout); 
相关问题