반응형
Socket(TCP) 통신을 이용한 Chatting Project 만들기
특징
- Server : 사용자가 접속할 때마다 쓰레드를 생성하여 메세지가 오면 BroadCast하는 방식
- Client : 1. GUI를 awt의 BorderLayer로 설정하여 화면을 구성한다
- Client : 2. 객체 생성시 파일을 읽고, 각각의 기능 수행시 ActionListener를 설정하여 버튼에 대한 Action을 수행한다.
- Client : 3. 전송되는 Object는 ObjectOutputStream을 이용하여 전송하고, 받는 것은 ObjectInputStream을 이용하여 수신한다.
구현 과정
- 서버(메인)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public void go() { ServerSocket sv = new ServerSocket("ip", port_num); // 1.서버 소켓 생성 try { Socket s; System.out.println("Waiting Clients"); s = sv.accept(); // 2.클라이언트 연결대기 System.out.println("Connected!!!"); ObjectOutputStream oos; // 3.쓰는 파이프라인 생성 ObjectInputStream ois; // 3.받는 파이프라인 생성 ois = new ObjectInputStream(s.getInputStream()); oos = new ObjectOutputStream(s.getOutputStream()); users.add(new User(s, ois, oos)); // 4.사용자 정보저장 ChatServerThread cs = new ChatServerThread(ois); cs.start(); // 5.쓰레드 생성 } catch (Exception e) { e.printStackTrace(); } } | cs |
- 서버(쓰레드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class ChatServerThread extends Thread { private ObjectInputStream ois; public ChatServerThread(ObjectInputStream ois) { this.ois = ois; } @SuppressWarnings("deprecation") @Override public void run() { while (true) { try { String msg = (String) ois.readObject(); // 1. 메세지를 받자 broadcast(msg); // 2. 받으면 전부 쏘기 } catch(EOFException ee) { removeClient(ois); // 3. 연결 끊긴 예외 발생시 System.out.println(getName() + ": bye bye.. ㅠ.ㅠ" ); stop(); // 4. 쓰레드종료 } catch (Exception e) { e.printStackTrace(); } } } } | cs |
- 클라이언트(텍스트 전송)
1 2 3 4 5 6 7 8 9 | tf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 텍스트 필드에서 엔터키 입력시 호출되는 콜백 메서드 String str = time(); // 1. 시간 입력 같이 해서 모든 텍스트 완성 cc.send(str); // 2. 텍스트 서버로 전송 tf.setText(""); // 3. 텍스트 글자 지우기 } }); | cs |
- 클라이언트(종료시)
1 2 3 4 5 6 7 8 9 | f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // 창 닫기 버튼 클릭시 호출되는 콜백 메서드 progress = false; // 1.퇴장 플래그 cc.send( "[" + cc.name + "] 님이 퇴장하셨습니다."); f.dispose(); // 2.창닫기 cc.close(); // 3.소켓 끊기 } }); | cs |
관련 소스코드는 여기로!!!
반응형
'Developer > 개발일기장' 카테고리의 다른 글
Backend 서버 개발시에 유용한 Intellij 인텔리제이 플러그인 추천 (1) | 2022.10.03 |
---|---|
DDD(Domain Driven Design) - 도메인 주도 설계란? 마이크로서비스의 관점에서 (8) | 2020.04.16 |
Agile이란? - 애자일 개발 방법론에 대해서 (0) | 2020.02.19 |
짧은 우아한 테크코스(Wootech) 후기 (0) | 2019.06.17 |
[개발방법론] - Java를 올바르게 개발하자! (0) | 2019.04.06 |