[java] 소켓 작업에 대한 제한 시간 설정
소켓을 만들 때 :
Socket socket = new Socket(ipAddress, port);
IP 주소를 사용할 수 없기 때문에 괜찮은 예외가 발생합니다. (테스트 변수는 String ipAddress = "192.168.0.3"
및 int port = 300
.)
문제는 해당 소켓에 대한 시간 제한을 어떻게 설정합니까?
소켓을 만들 때 a UnknownHostException
를 얻고 소켓이 시간 초과 되기 전에 시간을 어떻게 줄 입니까?
답변
사용 Socket()
생성자 와 connect(SocketAddress endpoint, int timeout)
방법 대신합니다.
귀하의 경우에는 다음과 같이 보일 것입니다.
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);
문서에서 인용
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
지정된 제한 시간 값을 사용하여이 소켓을 서버에 연결합니다. 0의 제한 시간은 무한 제한 시간으로 해석됩니다. 그러면 연결이 설정되거나 오류가 발생할 때까지 차단됩니다.
매개 변수 :
endpoint
-SocketAddress-
timeout
사용되는 제한 시간 값 (밀리 초).던졌습니다 :
IOException
-연결 중에 오류가 발생하는
SocketTimeoutException
경우- 연결 전에 시간 초과가 만료 된
IllegalBlockingModeException
경우-이 소켓에 연결된 채널이 있고 채널이 비 차단 모드 인
IllegalArgumentException
경우-끝 점이 null이거나이 소켓에서 지원하지 않는 SocketAddress 하위 클래스 인 경우이후 : 1.4
답변
소켓에 대한 시간 제한을 설정하지 않고 해당 소켓에서 수행 하는 작업에 대한 시간 제한을 설정 합니다.
예를 들면 socket.connect(otherAddress, timeout)
또는 작업에 socket.setSoTimeout(timeout)
대한 시간 제한을 설정합니다 read()
.
참조 : http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
답변
다음 솔루션을 사용할 수 있습니다.
SocketAddress sockaddr = new InetSocketAddress(ip, port);
// Create your socket
Socket socket = new Socket();
// Connect with 10 s timeout
socket.connect(sockaddr, 10000);
도움이 되었기를 바랍니다.
답변
(으)로 인해 시간 제한을 제어 할 수 없습니다 UnknownHostException
. 이것은 DNS 타이밍입니다. 유효한 호스트가 주어지면 연결 시간 제한 만 제어 할 수 있습니다. 앞의 답변 중 어느 것도이 점을 올바르게 다루지 않습니다.
그러나 UnknownHostException
호스트 이름이 아닌 IP 주소를 지정할 때 실제로 얻는 것이 믿기지 않습니다.
편집 Java의 DNS 시간 초과를 제어하려면 이 답변을 참조하십시오 .