오늘이라도

34. Networking ② 본문

취업성공패키지 SW 개발자 교육/Java

34. Networking ②

upcake_ 2020. 4. 3. 21:15
반응형

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 


▲예제 1 - 1. 일대일 채팅 서버

① ServerSocket, Socket 생성 ▶ ServerSocket에 포트를 할당한다.

② 수신 스레드 객체 생성 후 start() 메서드, socket을 매개 변수로 넣는다.

③ 송신 스레드 객체 생성 후 start() 메서드, socket을 매개 변수로 넣는다.

④ 서버 소켓을 닫아준다, 소켓은 스레드에서 사용하기 때문에 서버에서 닫지 않는다.

 

▲예제 1 - 2. 일대일 채팅 클라이언트

① Socket 생성 ▶ 서버의 ip와 포트를 할당한다.

② 송신 스레드 객체 생성 후 start() 메서드 ▶ socket을 매개 변수로 넣는다.

③ 수신 스레드 객체 생성 후 start() 메서드 ▶ socket을 매개 변수로 넣는다.

④ 소켓은 스레드에서 사용하기 때문에 클라이언트에서 닫지 않는다.

 

▲예제 1 - 3. 일대일 채팅 송신 쓰레드

① 소켓을 매개 변수로 받기 때문에 멤버 변수로 선언하고 기본 생성자 메서드를 만든다.

② Thread 클래스를 상속받고 run() 메서드를 오버라이드 한다.

③ 문자를 송신하기 때문에 OutputStream, PrintWriter 브릿지를 만든다.

④ 키보드로 입력하기 위해 Scanner 클래스 객체를 만든다.

⑤ 메시지를 계속 입력하기 위해 while() 문을 사용한다.

⑥ 메시지를 입력하는 문단을 while() 문 내부에 작성하고 종료 단어 bye를 만든다.

⑦ 메시지를 송신하기 위해 pw.prinln()과 pw.flush() 메서드를 사용한다.

⑧ 사용이 끝난 스캐너와 소켓을 닫아준다.

 

▲예제 1 - 4. 일대일 채팅 수신 쓰레드

① 소켓을 매개 변수로 받기 때문에 멤버 변수로 선언하고 기본 생성자 메서드를 만든다.

② Thread 클래스를 상속받고 run() 메서드를 오버라이드 한다.

문자를 수신하기 때문에 InputStream, InputStreamReader, BufferedReader 브릿지를 만든다.

④ 누가 접속했는지 알기 위해 getInetAddress()와 getHostName()으로 접속자 이름을 받는다.

⑤ 메시지를 계속 수신하기 위해 while() 문을 사용한다.

⑥ while() 문 내부에 수신받는 문단을 작성하고 종료 단어 bye가 입력되었을 때 종료되는 문단도 작성한다.

⑦ 사용이 끝난 소켓을 닫아준다.

 

▲예제 1 - 5. 일대일 채팅 작동 화면 (클릭해서 봐주세요)

 

▲예제 2 - 1. 단체 채팅 서버

① ServerSocket, Socket 생성 ▶ ServerSocket에 포트를 할당한다.

② 불특정 다수가 서버로 들어오기 때문에 while() 문을 사용한다.

while() 문 내부에 여러 접속을 받기 위한 Person 스레드 객체 생성 후 start() 메서드, socket을 매개 변수로 넣는다.

④ 서버 소켓과 소켓을 스레드에서 사용하기 때문에 서버에서 닫지 않는다.

 

▲예제 2 - 2. 단체 채팅 클라이언트

① Socket 생성 ▶ 서버의 ip와 포트를 할당한다.

② 대화명을 args [] 배열에 받도록 안내문을 작성한다.

 송신 스레드 객체 생성 후 start() 메서드 ▶ socket을 매개 변수로 넣는다.

 수신 스레드 객체 생성 후 start() 메서드 ▶ socket을 매개 변수로 넣는다.

⑤ 소켓은 스레드에서 사용하기 때문에 클라이언트에서 닫지 않는다.

 

▲예제 2 - 3. 단체 채팅 송신 쓰레드

① 소켓과 대화명을 매개 변수로 받기 때문에 멤버 변수로 선언하고 기본 생성자 메서드를 만든다.

② Thread 클래스를 상속받고 run() 메서드를 오버라이드 한다.

③ 문자를 송신하기 때문에 OutputStream, PrintWriter 브릿지를 만든다.

④ 매개 변수로 받은 대화명을 송신하기 위해 pw.prinln()과 pw.flush() 메서드를 사용한다.

 키보드로 입력하기 위해 Scanner 클래스 객체를 만든다.

 메시지를 계속 입력하기 위해 while() 문을 사용한다.

메시지를 입력하는 문단을 while() 문 내부에 작성하고 종료 단어 bye를 만든다.

종료할 때 사용이 끝난 PrintWriter 브릿지와 Scanner 클래스를 닫아 준다.

⑨ 입력받은 메시지를 송신하기 위해 pw.prinln()과 pw.flush() 메서드를 사용한다.

⑩ 사용이 끝난 소켓을 닫아준다.

 

▲예제 2 - 4. 단체 채팅 수신 쓰레드

① 소켓을 매개 변수로 받기 때문에 멤버 변수로 선언하고 기본 생성자 메서드를 만든다.

② Thread 클래스를 상속받고 run() 메서드를 오버라이드 한다.

 문자를 수신하기 때문에 InputStream, InputStreamReader, BufferedReader 브릿지를 만든다.

 메시지를 계속 수신하기 위해 while() 문을 사용한다.

while() 문 내부에 수신받는 문단을 작성하고 종료 단어 bye가 입력되었을 때 종료되는 문단도 작성한다.

⑥ 종료할 때 사용이 끝난 BufferedReader 브릿지도 닫아준다.

⑦ 사용이 끝난 소켓을 닫아준다.

 

▲예제 2 - 5. 단체 채팅 

① 제일 먼저 접속한 클라이언트의 모든 정보를 받도록 static을 사용하여 초기화 블록을 만들어준다.

② 초기화 블록에 PrintWriter 타입만 다루도록 제네릭스를 설정한 ArrayList를 선언 및 초기화해준다.

③ 멤버 변수 Socket과 PrintWriter를 선언하고 socket을 매개변수로 받는 생성자를 만들어준다.

④ (추후 수정)

⑤ Thread 클래스를 상속받고 run() 메서드를 오버 라이딩한다.

⑥ 접속한 사람의 정보를 알기 위해 getInetAddress()와 getHostName() 메서드를 사용한다.

⑦ 대화명 name을 readLine()으로 입력받고 sendAll로 입장 메시지를 접속해 있는 사용자들에게 뿌려준다.

⑧ 사용자가 입력한 내용을 String msg로 받아서 뿌려준다.

⑨ 퇴장 시 퇴장 메시지를 뿌려준다.

 

▲예제 2 - 6. 단체 채팅 작동 화면 (클릭해서 봐주세요)

반응형

'취업성공패키지 SW 개발자 교육 > Java' 카테고리의 다른 글

36. 외부 API ② : Jericho HTML Parser 이용하기  (0) 2020.04.08
35. 외부 API ①  (0) 2020.04.07
33. Networking ①  (0) 2020.04.02
32. IO ③  (0) 2020.04.01
31. IO ②  (0) 2020.03.31