为套接字操作设置超时
当我创build一个套接字:
Socket socket = new Socket(ipAddress, port);  它引发exception,这是正确的,因为IP地址不可用。  (testingvariables,其中String ipAddress = "192.168.0.3"和int port = 300 。 
问题是:如何将其设置为该套接字超时?
 当我创build套接字时,如何在获取UnknownHostException之前减less时间并使套接字超时? 
 使用Socket()构造函数 ,然后connect(SocketAddress endpoint, int timeout)方法 。 
在你的情况下,它会看起来像这样:
 Socket socket = new Socket(); socket.connect(new InetSocketAddress(ipAddress, port), 1000); 
从文档引用
connectpublic void connect(SocketAddress endpoint, int timeout) throws IOException以指定的超时值将此套接字连接到服务器。 超时为零被解释为无限超时。 连接将阻塞,直到build立或发生错误。
参数:
endpoint– SocketAddress
timeout– 以毫秒为单位的超时值。抛出:
IOException– 如果在连接期间发生错误
SocketTimeoutException– 如果在连接之前超时过期
IllegalBlockingModeException– 如果此套接字具有关联的通道,并且通道处于非阻塞模式
IllegalArgumentException– 如果endpoint为null或者是此套接字不支持的SocketAddress子类由于:1.4
您不要为套接字设置超时,而是为您在该套接字上执行的操作设置超时。
 例如socket.connect(otherAddress, timeout) 
 或者在read()操作上设置超时的socket.setSoTimeout(timeout) 。 
请参阅: http : //docs.oracle.com/javase/7/docs/api/java/net/Socket.html
您可以使用以下解决scheme:
 SocketAddress sockaddr = new InetSocketAddress(ip, port); // Create your socket Socket socket = new Socket(); // Connect with 10 s timeout socket.connect(sockaddr, 10000); 
希望它有帮助!
 由于UnknownHostException您无法控制超时。 这些是DNS时间。 您只能控制给定有效主机的连接超时。 前面的答案都没有正确解决这一点。 
 但是当我们指定一个IP地址而不是一个主机名的时候,我发现很难相信你真的得到了UnknownHostException 。 
编辑要控制Java的DNS超时, 请参阅此答案 。
使用Socket的默认构造函数 ,然后使用connect()方法 。