학원/Java
21-11-19 TCP IP Server
링규
2021. 11. 19. 15:58
단방향통신 양방향통신
서비스를 제공하는 쪽을 서버, 서비스를 제공받는 쪽을 클라이언트라고 한다.
Server
1. 서버의 정보 시작 설정.
try {
ss = new ServerSocket(7777);
System.out.println(f.format(new Date()) + "서버가 준비되었습니다.");
} catch (IOException e) {
e.printStackTrace();
System.out.println("서버 설정에 실패하였습니다.");
System.out.println("프로그램을 종료합니다.");
return;
}
서버소켓 객체를 생성하는 과정에서 IOException 예외가 발생할 수 있으므로 try-catch 구문을 통해 객체를 생성한다.
(socket : 프로세스간의 통신에 사용되는 양쪽 endpoint)
2. 서버가 클라이언트의 요청을 기다리기 시작하는 명령
Socket s = ss.accept();
//클라이언트의 연결 요청이 올 때까지 대기
ServerSocket이 클라이언트의 연결 요청을 받으면 클라이언트 소켓과 통신할 새로운 통신용 소켓을 연결한다. 서버에서 사용하는 통신 소켓이 클라이언트 정보(클라이언트 ip, 포트 번호 등)를 이용하여 생성된다.
try {
System.out.println(f.format(new Date()) + "연결 요청을 기다립니다.");
Socket s = ss.accept();
System.out.println(f.format(new Date()) + s.getInetAddress() + "로 부터 연결 요청이 들어왔습니다.");
//s.getInetAddress() : 클라이언트의 아이피 주소를 추출하는 메소드
//클라이언트에게 메세지를 전송(출력)할 수 있는 권한을 Socket s로 부터 얻어서
// OutputStream 객체에 저장
OutputStream out = s.getOutputStream();
//권한에 실제 출력 도구를 포함하려면 out을 생성자로 전달한 DataOutputStream객체 필요
DataOutputStream dos = new DataOutputStream(out);
//최종 통신 출력 도구 : dos
//dos를 통해 클라이언트에게 간단 메세지를 전송
dos.writeUTF("[System] 연결에 성공하였습니다. ");
dos.close();
s.close();
} catch (IOException e) { e.printStackTrace(); }
try {
ss.close();
} catch (IOException e) { e.printStackTrace(); }
Client