[Java/CodingPractice]04. CodingPractice04
소켓통신 1:1 채팅
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 38 39 40 41 42 43 44 45 | package com.tcp.chat.client; import java.io.IOException; import java.net.Socket; import java.util.Scanner; import com.tcp.chat.util.Receiver; import com.tcp.chat.util.Sender; public class Guest extends Thread { private Socket socket; private Sender sender; private Receiver receiver; /// Constructor public Guest(String host, int port, String name, Scanner scanner) throws IOException{ super(); this.socket = new Socket(host, port); this.sender = new Sender(this.socket, name, scanner); this.receiver = new Receiver(this.socket); } @Override public void run() { sender.start(); receiver.start(); } public static void main(String[] args) throws IOException { String host = "localhost"; int port = 8080; Scanner scanner = new Scanner(System.in); System.out.println("채팅할 아이디를 입력하세요."); String name = scanner.nextLine(); Guest guest = new Guest(host, port, name, scanner); System.out.println("채팅방에 접속함. 호스트 IPv4 : " + host + ". \"exit\" 입력시 종료함. "); guest.start(); } } | cs |
ChatSocket.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 | package com.tcp.chat.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import com.tcp.chat.util.Receiver; import com.tcp.chat.util.Sender; public class ChatSocket extends Thread { private Socket socket; private Sender sender; private Receiver receiver; // / Constructor public ChatSocket(Socket socket, String name, Scanner scanner) throws IOException { super(); this.socket = socket; this.receiver = new Receiver(this.socket); this.sender = new Sender(this.socket, name, scanner); System.out.println("게스트가 접속함. 게스트 IPv4 : " + socket.getLocalAddress()); } @Override public void run() { sender.start(); receiver.start(); } public static void main(String args[]) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("1:1 채팅방 만듬. \"exit\"입력시 종료함. 채팅할 아이디를 입력하세요."); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); ChatSocket tcpIpSocket = new ChatSocket(serverSocket.accept(), name, scanner); tcpIpSocket.start(); serverSocket.close(); } } | 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 36 37 | package com.tcp.chat.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import com.tcp.chat.util.Receiver; import com.tcp.chat.util.Sender; public class ChatSocket extends Thread { private Socket socket; private Sender sender; private Receiver receiver; // / Constructor public ChatSocket(Socket socket, String name, Scanner scanner) throws IOException { super(); this.socket = socket; this.receiver = new Receiver(this.socket); this.sender = new Sender(this.socket, name, scanner); System.out.println("게스트가 접속함. 게스트 IPv4 : " + socket.getLocalAddress()); } @Override public void run() { sender.start(); receiver.start(); } public static void main(String args[]) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("1:1 채팅방 만듬. \"exit\"입력시 종료함. 채팅할 아이디를 입력하세요."); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); ChatSocket tcpIpSocket = new ChatSocket(serverSocket.accept(), name, scanner); tcpIpSocket.start(); serverSocket.close(); } } | 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 49 | package com.tcp.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; private String senderName; /// Constructor public Sender(Socket socket, String senderName, Scanner scanner) throws IOException{ super(); this.printWriter = new PrintWriter(socket.getOutputStream()); this.scanner = scanner; this.senderName = senderName; } public void closeAll() throws IOException{ printWriter.close(); scanner.close(); } public void sendMessage(String message){ printWriter.println("[ "+ senderName +" ] : " + message); System.out.println("[ "+ senderName +" ] : " + message); printWriter.flush(); } @Override public void run() { // TODO Auto-generated method stub try { while ((chatToReceiver = scanner.nextLine()) != null) { if (chatToReceiver.equals("exit")) { break; } sendMessage(chatToReceiver); } closeAll(); } catch (Exception e) { // TODO: handle exception } } } | cs |
반응형
'잔잔바리 > CodingPractice' 카테고리의 다른 글
[Java/CodingPractice]03. CodingPractice03 (0) | 2016.07.30 |
---|---|
[Java/CodingPractice]02. CodingPractice02 (0) | 2016.06.05 |
[Java/CodingPractice]01. CodingPractice01 (0) | 2016.06.02 |