Java programming

(22.11.01)Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ ๊ต๋ฅ˜(Client - Server)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2022. 11. 1.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„์ธก์—์„œ ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ๋‹ค์‹œ ๊ทธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ž‘์„ฑํ•ด๋ณด๋ผ. ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ํ‚ค๋ณด๋“œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„์„œ ์„œ๋ฒ„๋กœ ์ „์†กํ•ด์•ผํ•œ๋‹ค. (์—์ฝ” ์„œ๋ฒ„)

 

Server ํด๋ž˜์Šค ์ฝ”๋“œ

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
import java.io.*;
import java.net.*;
 
public class Server 
{
    public static void main(String[] args) 
    {
        try { 
            ServerSocket ss = new ServerSocket(1234);
            System.out.println("์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘");
            Socket s = ss.accept();//์„œ๋ฒ„์ชฝ์—์„œ ๋ฉˆ์ถฐ์„œ ๋ฌดํ•œ ๋Œ€๊ธฐ ํ•˜๋‹ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ 
            //์ ‘์† ์š”์ฒญ์„ ํ•˜๋ฉด ์ ‘์†์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์ ‘์†๋œ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ Socket ์ƒ์„ฑ
            System.out.println("ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ");
            //์ ‘์† ๊ด€๋ฆฌ
            
            
            //ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฉ”์‹œ์ง€ ํ˜ธ์ถœ
            OutputStream os = s.getOutputStream();
            OutputStreamWriter ow = new OutputStreamWriter(os);
            //๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ถœ๋ ฅ
            PrintWriter pw = new PrintWriter(ow);
            //๋ฌธ์ž์—ด ํ•œํ–‰ํ•œํ–‰์„ ์ถœ๋ ฅ
            
            pw.println("์ ‘์† ์„ฑ๊ณต");
            pw.flush(); //์ž‘์€ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ถœ๋ ฅํ•˜๊ฒŒ๋” ๋ช…๋ น
            
            //ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ์•„์ด๋”” ์•”ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
            InputStream is = s.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = br.readLine();
            String[] login = msg.split(" ");
            String uid = login[0];
            String upw = login[1];
            
            if(uid.equals("Smith")&&upw.equals("12345")) {
                pw.println("๋กœ๊ทธ์ธ ์„ฑ๊ณต");
                pw.flush();
                
                while(true) {
                String msg1 = br.readLine();//ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜จ ๋ฉ”์‹œ์ง€ ๋ฐ›๊ธฐ
                System.out.println("ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+msg1);
 
                pw.println(msg1);//ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ
                pw.flush();//๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€ ๋น„์šฐ๊ธฐ
                }
            }else {
                pw.println("๋กœ๊ทธ์ธ ์‹คํŒจ");
                pw.flush(); 
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("์„œ๋ฒ„ ์ข…๋ฃŒ");
   }
}
cs

 

Client ํด๋ž˜์Šค ์ฝ”๋“œ

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
import java.io.*;
import java.net.*;
import java.util.Scanner;
 
public class Client
{
    public static void main(String[] args)
    {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            System.out.println("์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต");
            
            //์„œ๋ฒ„์—์„œ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค
            InputStream is = s.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = br.readLine();
            
            System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+msg);
            
            if(msg.equals("์ ‘์† ์„ฑ๊ณต")) {
                OutputStream os = s.getOutputStream();
                OutputStreamWriter ow = new OutputStreamWriter(os);
                PrintWriter pw = new PrintWriter(ow);
                pw.println("Smith 12345");
                pw.flush();
                
                String loginresult = br.readLine();
                if(loginresult.equals("๋กœ๊ทธ์ธ ์„ฑ๊ณต")) {
                    System.out.println("๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:"+loginresult);
                    Scanner kbd = new Scanner(System.in);
                    while(true) {
                        System.out.println("์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:");
                        String line = kbd.nextLine();
                        pw.println(line);
                        pw.flush();
 
                        String msg1 = br.readLine();
                        System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+msg1);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ");
    }
}
cs

 

์„œ๋ฒ„ ํด๋ž˜์Šค  ์ฝ˜์†”:

์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘
ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:ใ…Žใ…‡
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํ•˜์„ธ์šฉ
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:๋น ๋น ์ด

 

 

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค ์ฝ˜์†”:

์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์ ‘์† ์„ฑ๊ณต
๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:๋กœ๊ทธ์ธ ์„ฑ๊ณต
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
ใ…Žใ…‡
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:ใ…Žใ…‡
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
์•ˆ๋…•ํ•˜์„ธ์šฉ
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํ•˜์„ธ์šฉ
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
๋น ๋น ์ด
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:๋น ๋น ์ด
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:

 

๋ฌดํ•œํžˆ ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ†ต์‹ ์šฉ ์“ฐ๋ ˆ๋“œ์—์„œ๋Š” ์†Œ์ผ“์„ ํ•„์š”๋กœ ํ•œ๋‹ค. (์„œ๋ฒ„ ํด๋ž˜์Šค์˜ 18์—ด, 28์—ด)

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์˜ 34์—ด~36์—ด ์ถœ๋ ฅ๊ณผ ์„œ๋ฒ„ ํด๋ž˜์Šค์˜ 41์—ด ์ž…๋ ฅ๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด

 

 


์„œ๋ฒ„ ์ปดํ“จํ„ฐ๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋ฌดํ•œ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ๊ฐ€ ์ ‘์†ํ•˜๋ฉด ํ†ต์‹ ํ•œ๋‹ค. ๊ทผ๋ฐ ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋ผ๋ฉด ํ†ต์‹ ํ•˜๋ฉด์„œ ๋Œ€๊ธฐ๋„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ‘ํ–‰์ฒ˜๋ฆฌ ํ•ด์•ผํ•œ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด ํ•œ๋ช…์ด ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์ด์šฉ์ž๋“ค์ด ์ด์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„   ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ(ํ†ต์‹ ์šฉ ์ „๋‹ด ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰) ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ”๋“œ

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.io.*;
import java.net.*;
 
public class Server 
{
    public static void main(String[] args) 
    {
        try { 
            ServerSocket ss = new ServerSocket(1234);
            while(true) {
                System.out.println("์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘");
                Socket s = ss.accept(); //๋ฌดํ•œ๋Œ€๊ธฐ
                System.out.println("ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ");
                new CommThread(s).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("์„œ๋ฒ„ ์ข…๋ฃŒ");
    }
    //๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ํ†ต์‹ ์šฉ ์“ฐ๋ ˆ๋“œ
    static class CommThread extends Thread {
        private Socket s;
        private PrintWriter pw;
        private BufferedReader br;
        private boolean loginpass;
        CommThread(Socket s) {
            this.s = s;
            try {
                OutputStream os = s.getOutputStream();
                OutputStreamWriter ow = new OutputStreamWriter(os);
                this.pw = new PrintWriter(ow);
                pw.println("์ ‘์† ์„ฑ๊ณต");
                pw.flush();
                
                loginpass = login();
                
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            if(loginpass) {
                try {
                    while(true) {
                        String m = br.readLine();
                        System.out.println("ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+m);
                        pw.println(m);
                        pw.flush();
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
            System.out.println("ํ†ต์‹  ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ");
        }
        private boolean login() {
            try {
                InputStream is = s.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                this.br = new BufferedReader(isr);
                
                String msg = br.readLine();
                String[] login = msg.split(" ");
                String uid = login[0];
                String upw = login[1];
                if(uid.equals("Smith")&&upw.equals("12345")) {
                    pw.println("๋กœ๊ทธ์ธ ์„ฑ๊ณต");
                    pw.flush();
                    return true;
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
            return false;
        }
    }
}
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.io.*;
import java.net.*;
import java.util.Scanner;
 
public class Client
{
    public static void main(String[] args)
    {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            System.out.println("์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต");
            
            //์„œ๋ฒ„์—์„œ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค
            InputStream is = s.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = br.readLine();
            
            System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+msg);
            
            if(msg.equals("์ ‘์† ์„ฑ๊ณต")) {
                OutputStream os = s.getOutputStream();
                OutputStreamWriter ow = new OutputStreamWriter(os);
                PrintWriter pw = new PrintWriter(ow);
                pw.println("Smith 12345");
                pw.flush();
                
                String loginresult = br.readLine();
                if(loginresult.equals("๋กœ๊ทธ์ธ ์„ฑ๊ณต")) {
                    System.out.println("๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:"+loginresult);
                    Scanner kbd = new Scanner(System.in);
                    while(true) {
                        System.out.println("์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:");
                        String line = kbd.nextLine();
                        pw.println(line);
                        pw.flush();
 
                        String m = br.readLine();
                        System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+m);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ");
    }
}
cs

 

์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ˜์†”:

์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘
ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ
์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํ•˜์„ธ์š”
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”

 

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค ์ฝ˜์†”:

์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์ ‘์† ์„ฑ๊ณต
๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:๋กœ๊ทธ์ธ ์„ฑ๊ณต
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
์•ˆ๋…•ํ•˜์„ธ์š”
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํ•˜์„ธ์š”
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:


ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์—์„œ ๋ฌด์–ธ๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด์•ผ๋งŒ ๋‹ค์‹œ ๋˜๋Œ์•„ ๋ฐ›๋Š” ์—์ฝ” ์„œ๋ฒ„ ๋ง๊ณ  ์‹ค์ œ๋กœ ์ฑ„ํŒ… ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹คํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์—์„œ๋„ ํ†ต์‹ ์šฉ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด๋Š”์šฉ ์“ฐ๋ ˆ๋“œ ๋ฐ›๋Š” ์šฉ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜์™€ ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  ์“ฐ๋ ˆ๋“œ, 2๊ฐ€์ง€๋กœ ์‹คํ–‰๋ผ์•ผ ํ•œ๋‹ค.

 

์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ”๋“œ

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.io.*;
import java.net.*;
 
public class Server 
{
    public static void main(String[] args) 
    {
        try { 
            ServerSocket ss = new ServerSocket(1234);
            while(true) {
                System.out.println("์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘");
                Socket s = ss.accept(); //๋ฌดํ•œ๋Œ€๊ธฐ
                System.out.println("ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ");
                new CommThread(s).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("์„œ๋ฒ„ ์ข…๋ฃŒ");
    }
    //๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ํ†ต์‹ ์šฉ ์“ฐ๋ ˆ๋“œ
    static class CommThread extends Thread {
        private Socket s;
        private PrintWriter pw;
        private BufferedReader br;
        private boolean loginpass;
        CommThread(Socket s) {
            this.s = s;
            try {
                OutputStream os = s.getOutputStream();
                OutputStreamWriter ow = new OutputStreamWriter(os);
                this.pw = new PrintWriter(ow);
                pw.println("์ ‘์† ์„ฑ๊ณต");
                pw.flush();
                
                loginpass = login();
                
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            if(loginpass) {
                try {
                    while(true) {
                        String m = br.readLine();//ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜จ ๋ฉ”์‹œ์ง€ ๋ฐ›๊ธฐ
                        System.out.println("ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+m);
        
                        pw.println(m);//ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ
                        pw.flush();//๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€ ๋น„์šฐ๊ธฐ
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
            System.out.println("ํ†ต์‹  ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ");
        }
        private boolean login() {
            try {
                InputStream is = s.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                this.br = new BufferedReader(isr);
                
                String msg = br.readLine();
                String[] login = msg.split(" ");
                String uid = login[0];
                String upw = login[1];
                if(uid.equals("Smith")&&upw.equals("12345")) {
                    pw.println("๋กœ๊ทธ์ธ ์„ฑ๊ณต");
                    pw.flush();
                    return true;
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
            return false;
        }
    }
}
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
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.io.*;
import java.net.*;
import java.util.Scanner;
 
public class Client
{
    public static void main(String[] args)
    {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            System.out.println("์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต");
            
            //์„œ๋ฒ„์—์„œ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค
            InputStream is = s.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            
            new ClientThread(s, br).start(); //๋„คํŠธ์›Œํฌ ์ถœ๋ ฅ ์“ฐ๋ ˆ๋“œ
            
            while(true) {//๋„คํŠธ์›Œํฌ ์ž…๋ ฅ ์“ฐ๋ ˆ๋“œ
                String m = br.readLine();
                System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+m);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ");
    }
    //๋„คํŠธ์›Œํฌ ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•  ํด๋ผ์ด์–ธํŠธ ์ธก ์“ฐ๋ ˆ๋“œ
    static class ClientThread extends Thread {
        Socket s;
        PrintWriter pw;
        BufferedReader br;
        boolean loginpass;
        ClientThread(Socket s,BufferedReader br){
            this.s=s;
            this.br=br;
            try {
                String msg = br.readLine();
                System.out.println("์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:"+msg);
                if(msg.equals("์ ‘์† ์„ฑ๊ณต")) {
                    OutputStream os = s.getOutputStream();
                    OutputStreamWriter ow = new OutputStreamWriter(os);
                    this.pw = new PrintWriter(ow);
                    loginpass = login();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            Scanner kbd = new Scanner(System.in);
            while(true) {
                System.out.println("์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:");
                String line = kbd.nextLine().strip();
                pw.println(line);
                pw.flush();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        private boolean login() {
            pw.println("Smith 12345");
            pw.flush();
            String loginresult =null;
            try {
                loginresult = br.readLine();
                System.out.println("๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:"+loginresult);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(loginresult.equals("๋กœ๊ทธ์ธ ์„ฑ๊ณต")) {
                return true;
            }else {
                return false;
            }
        }
    }            
}
cs

์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ˜์†”:

์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘
ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ
์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:hello
ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:Bye

 

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค ์ฝ˜์†”:

์„œ๋ฒ„์ ‘์† ์„ฑ๊ณต
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:์ ‘์† ์„ฑ๊ณต
๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ:๋กœ๊ทธ์ธ ์„ฑ๊ณต
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
hello
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:hello
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:
Bye
์„œ๋ฒ„์ธก์—์„œ ๋ณด๋‚ด์˜จ ๋ฉ”์„ธ์ง€:Bye
์ž…๋ ฅํ•  ๋ฉ”์‹œ์ง€:

 

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์˜ ๋„คํŠธ์›Œํฌ ์ž…๋ ฅ ์“ฐ๋ ˆ๋“œ์™€ ๋„คํŠธ์›Œํฌ ์ถœ๋ ฅ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ณ‘ํ–‰ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.


์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด ์ž์‹ ์ด ์•„๋‹Œ ํƒ€์ธ์—๊ฒŒ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ ์†Œ์ผ“๊ณผ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ๋งž๋Š” ์ŠคํŠธ๋ฆผ์„ ์จ์•ผํ•œ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด

๊ฐ ์ŠคํŠธ๋ฆผ์—๋Š” ์†Œ์ผ“์ด ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ1์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด ํด๋ผ์ด์–ธํŠธ2์—์„œ ์ˆ˜์‹ ํ•œ๋‹ค๊ณ  ์˜ˆ๋ฅผ ๋“ ๋‹ค๋ฉด,

ํด๋ผ์ด์–ธํŠธ1์˜ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜๊ฐ€ ์„œ๋ฒ„ ์ปดํ“จํ„ฐ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์„œ๋ฒ„์ปดํ“จํ„ฐ์˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์‹ ๋˜์–ด ํด๋ผ์ด์–ธํŠธ2์˜ ์ž…๋ ฅ์ŠคํŠธ๋ฆผ์—์„œ ์†ก์‹ ํ•œ๋‹ค.(๊ทธ๋ฆผ์—์„œ ์ดˆ๋ก์ƒ‰ ๋ผ์ธ ์ฝ”์Šค)


์—ฌ๋Ÿฌ๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ ค๋ฉด ์„œ๋กœ ๋งŽ์€ ์†Œ์ผ“์ด ํ•„์š”ํ•ด์ง„๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒํ•œํ…Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ(๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…)

 

์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ”๋“œ

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.io.*;
import java.net.*;
import java.util.ArrayList;
 
public class Server 
{
    static ArrayList<PrintWriter> out = new ArrayList<PrintWriter>();
    
    public static void main(String[] args) 
    {
        try { 
            ServerSocket ss = new ServerSocket(1234);
            while(true) {
                System.out.println("์„œ๋ฒ„์†Œ์ผ“ ๋Œ€๊ธฐ์ค‘");
                Socket s = ss.accept(); //๋ฌดํ•œ๋Œ€๊ธฐ
                System.out.println("ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋จ");
                new CommThread(s).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("์„œ๋ฒ„ ์ข…๋ฃŒ");
    }
    //๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ํ†ต์‹ ์šฉ ์“ฐ๋ ˆ๋“œ
    static class CommThread extends Thread {
        private Socket s;
        private PrintWriter pw;
        private BufferedReader br;
        private boolean loginpass;
        CommThread(Socket s) {
            this.s = s;
            try {
                OutputStream os = s.getOutputStream();
                OutputStreamWriter ow = new OutputStreamWriter(os);
                this.pw = new PrintWriter(ow);
                
                pw.println("์ ‘์† ์„ฑ๊ณต");
                pw.flush();
                
                loginpass = login();
                
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            if(loginpass) {
                try {
                    PrintWriter toClient = null;
                    while(true) {
                        String m = br.readLine();//ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜จ ๋ฉ”์‹œ์ง€ ๋ฐ›๊ธฐ
                        
                        for(int i=0;i<out.size();i++) {
                            toClient = out.get(i);
                            toClient.println(m);//๋ฐ›์€ ๋ฉ”์„ธ์ง€ ๋ฃจํ”„๋ฅผ ํ†ตํ•˜์—ฌ ๋ชจ๋“ ์‚ฌ๋žŒํ•œํ…Œ ๋ณด๋‚ด๊ธฐ
                            toClient.flush();
                        }
                    }
                }catch (Exception e) {
                    System.err.println("ํด๋ผ์ด์–ธํŠธ ๋‚˜๊ฐ");
                    out.remove(pw);
                }
            }
            System.out.println("ํ†ต์‹  ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ");
        }
        private boolean login() {
            try {
                InputStream is = s.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                this.br = new BufferedReader(isr);
                
                String msg = br.readLine();
                String[] login = msg.split(" ");
                String uid = login[0];
                String upw = login[1];
                if(uid.equals("Smith")&&upw.equals("12345")) {
                    out.add(pw); //๋ชจ๋“  ์ถœ๋ ฅ์šฉ ์ŠคํŠธ๋ฆผ์„ ํ•œ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.
                    pw.println("๋กœ๊ทธ์ธ ์„ฑ๊ณต");
                    pw.flush();
                    return true;
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
            return false;
        }
    }
}
cs

54์—ด ~57์—ด์„ ์ˆ˜์ •ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•œ๋‹ค.

78์—ด - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๋ช…์”ฉ ์ƒ๊ธธ๋•Œ ๋งˆ๋‹ค ์ถœ๋ ฅํ•  ํ”„๋ฆฐํŠธ๋ผ์ดํ„ฐ๋ฅผ list์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

62์—ด - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜๊ฐ”์„ ๋•Œ ํ•ด๋‹น ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ๋„ ์‚ญ์ œ์‹œ์ผœ์ค€๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ•˜๋‚˜ ๋” ์‹คํ–‰ํ•˜์—ฌ  ์ฒซ๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๋‚ธ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‘๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ์ˆ˜์‹ ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฒซ๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ ์ฝ˜์†” ๊ฐ’:

๋‘๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ ์ฝ˜์†” ๊ฐ’:

์ฒซ๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ ๋‚ด์šฉ์„ ๋‘๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‘๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ข…๋ฃŒ ์‹œํ‚ค๊ณ  ๋‚˜์„œ ์„œ๋ฒ„ ํด๋ž˜์Šค ์ฝ˜์†” ๋‚ด์šฉ:

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜๊ฐ€๋ฉด ํ•ด๋‹น br.readLine()์— ๋“ค์–ด์˜ฌ ์ •๋ณด๋„ ์—†์–ด์ ธ ๊ฐ™์€ ์„ธํŠธ์˜ pw๋Š” ํ•„์š”๊ฐ€ ์—†์–ด์ ธ์„œ ์—๋Ÿฌ๊ฐ€ ๋œจ๊ฒŒ๋œ๋‹ค.

 ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜๊ฐ€๋ฉด ํ•ด๋‹น br๊ณผ ๊ฐ™์€ ์“ฐ๋ ˆ๋“œ์˜€๋˜ pw๋ฅผ ์ฐพ์•„ ์—†์• ์ค€๋‹ค.(์„œ๋ฒ„ ํด๋ž˜์Šค 62์—ด)

๋Œ“๊ธ€