[Java/CodingPractice]03. CodingPractice03
그룹 채팅.
Host.java
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package com.chat.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.chat.util.BroadCast; import com.chat.util.GuestVO; public class Host extends Thread { private ServerSocket serverSocket; private Socket socket; private List<GuestVO> guests; private int port; public Host(int port) throws IOException { super(); this.port = port; this.serverSocket = new ServerSocket(this.port); guests = new ArrayList<GuestVO>(); Collections.synchronizedList(guests); } @Override public void run(){ System.out.println("채팅방을 켰음. 게스트들을 대기중... "); try { while(true){ BroadCast broadCast = new BroadCast(serverSocket.accept(), this.guests); broadCast.start(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public static void main(String args[]) throws IOException{ new Host(8080).start(); } } | cs |
BroadCast.java
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package com.chat.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.List; public class BroadCast extends Thread { private BufferedReader bufferedReader; private PrintWriter printWriter; private String chatFromReceiver; private List<GuestVO> guests; /// Constructor public BroadCast(Socket socket, List<GuestVO> guests) throws IOException{ super(); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); printWriter = new PrintWriter(socket.getOutputStream()); this.guests = guests; } public void closeAll() throws IOException{ bufferedReader.close(); printWriter.close(); } public void sendToAll(String message){ for(GuestVO guest: guests){ guest.getPrintWriter().println(message); guest.getPrintWriter().flush(); } } @Override public void run() { GuestVO guest = null; // TODO Auto-generated method stub try { guest = new GuestVO(printWriter, bufferedReader.readLine()); System.out.println("\"" + guest.getName() + "\"님이 접속함."); guests.add(guest); sendToAll("\"" + guest.getName() + "\" 님이 접속함."); while ((chatFromReceiver = bufferedReader.readLine()) != null){ System.out.println("[ "+ guest.getName() +" ] : "+ chatFromReceiver); sendToAll("[ "+ guest.getName() +" ] : "+ chatFromReceiver); } closeAll(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ System.out.println("\"" + guest.getName() + "\"님이 나감."); sendToAll("\"" + guest.getName() + "\"님이 나감."); guests.remove(guest); } } } | cs |
GuestVO.java
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 26 27 28 29 30 31 32 33 34 | package com.chat.util; import java.io.PrintWriter; public class GuestVO { private PrintWriter printWriter; private String name; public GuestVO(PrintWriter printWriter, String name) { super(); this.printWriter = printWriter; this.name = name; } public PrintWriter getPrintWriter() { return printWriter; } public void setPrintWriter(PrintWriter printWriter) { this.printWriter = printWriter; } public String getName() { return name; } public void setName(String name) { this.name = name; } } | cs |
Guest.java
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 26 27 28 29 30 31 32 33 34 35 36 37 | package com.chat.client; import java.io.IOException; import java.net.Socket; import java.util.Scanner; import com.chat.util.Receiver; import com.chat.util.Sender; public class Guest extends Thread { private Socket socket; private Sender sender; private Receiver receiver; private Scanner scanner; /// Constructor public Guest(String iPv4, int port) throws IOException { this.socket = new Socket(iPv4, port); this.scanner = new Scanner(System.in); this.sender = new Sender(socket, scanner); this.receiver = new Receiver(socket); } @Override public void run() { sender.start(); receiver.start(); } public static void main(String[] args) throws IOException{ Guest guest = new Guest("localhost", 8080); guest.start(); } } | cs |
Receiver.java
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 26 27 28 29 30 31 32 33 34 35 | package com.chat.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class Receiver extends Thread { private BufferedReader bufferedReader; private String chatFromReceiver; /// Constructor public Receiver(Socket socket) throws IOException{ super(); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } public void closeAll() throws IOException{ bufferedReader.close(); } @Override public void run() { // TODO Auto-generated method stub try { while ((chatFromReceiver = bufferedReader.readLine()) != null){ System.out.println(chatFromReceiver); } closeAll(); } catch (Exception e) { // TODO: handle exception } } } | cs |
Sender.java
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package com.chat.util; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class Sender extends Thread{ private PrintWriter printWriter; private Scanner scanner; private String chatToReceiver; /// Constructor public Sender(Socket socket, Scanner scanner) throws IOException{ super(); this.printWriter = new PrintWriter(socket.getOutputStream()); this.scanner = scanner; } public void closeAll() throws IOException{ printWriter.close(); scanner.close(); } @Override public void run() { // TODO Auto-generated method stub System.out.println("서버에 접속함. 이름 입력."); printWriter.println(scanner.nextLine()); printWriter.flush(); try { while ((chatToReceiver = scanner.nextLine()) != null) { if (chatToReceiver.equals("exit")) { break; } printWriter.println(chatToReceiver); printWriter.flush(); } closeAll(); } catch (Exception e) { // TODO: handle exception } } } | cs |
반응형
'잔잔바리 > CodingPractice' 카테고리의 다른 글
[Java/CodingPractice]04. CodingPractice04 (0) | 2016.08.01 |
---|---|
[Java/CodingPractice]02. CodingPractice02 (0) | 2016.06.05 |
[Java/CodingPractice]01. CodingPractice01 (0) | 2016.06.02 |