학원/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