import java.io.IOException;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class ConnectTimeoutMain2 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress("192.168.1.250", 45678), 1000);
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("end = " + (end - start));
}
}
- 소켓을 만들고 나서 연결하면 시간을 설정하여 그 시간안에 연결이 안될 시 타임아웃 에러를 던질 수 있다.
TCP 소켓 타임아웃 - read 타임아웃 (실무에서 자주 발생)
- 연결은 되었지만 서버가 응답을 주지 않을 때
- 죽은 Server
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SoTimeoutServer {
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket serverSocket = new ServerSocket(12345);
Socket socket = serverSocket.accept();
Thread.sleep(1000000);
}
}
- Client
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class SoTimeoutClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 12345);
InputStream input = socket.getInputStream();
try {
socket.setSoTimeout(3000); // 타임아웃 시간 설정
int read = input.read();
System.out.println("read = " + read);
} catch (Exception e) {
e.printStackTrace();
}
socket.close();
}
}
- 설정한 타임아웃 시간으로 저 시간까지 기다렸다가 에러 던지기
※ 외부 서버와 통신을 하는 경우 반드시 연결 타임아웃과 소켓 타임아웃을 지정하자
'개발이 좋아서 > Java가 좋아서' 카테고리의 다른 글
네트워크 예외4 - 강제 종료 (0) | 2024.11.30 |
---|---|
네트워크 예외3 - 정상 종료 (0) | 2024.11.30 |
네트워크 예외1 - 연결 예외 (1) | 2024.11.30 |
네트워크 - 프로그램 예제 (0) | 2024.11.30 |
네트워크 - 자원 정리(try-with-resources) (0) | 2024.11.28 |