Java/CodingPractice

[Java/CodingPractice]04. CodingPractice04

양승길 2016. 8. 1. 09:08

[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