2012年8月4日 星期六

[ Java 文章收集 ] Socket Timeout 有兩種

轉載自 這裡 
第一種,是會丟出 SocketTimeoutExcpetion 的,有找到Host但一直等不到回應。可以設 socket.setSoTimeout(timeout)

第二種,是會丟出 UnknownHostException 的,是找不到 Host 的,若在Local 找不到這個 Host 很快就丟,但在 Server 通常內建一堆DNS解析IP,等全部巡完一輪都要等好久。所以時間內找不到就視為 UnknownHostException 作法如下 : 
  1. Socket socket = SocketFactory.getDefault().createSocket();  
  2. SocketAddress remoteaddr = new InetSocketAddress(host, port);  
  3. socket.connect(remoteaddr, timeout);   // 就在connect時設timeout  
若Socket一開始就傳了host和port,如 SocketFactory.getDefault().createSocket(host, port)那這個 Socket 也等同在做 connect動作,只因為沒設 timeout,程式就 hang 在等socket create 完畢,socket也痴痴等到確定找不到host!

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...