‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/º Java

[์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•œ ์ฑ„ํŒ… ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

Trudy | ์†ก์—ฐ 2023. 11. 28. 19:15

 

ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ
	์†Œ์ผ“

	์ƒ์„ฑ์ž(์†Œ์ผ“)

	run ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„
		๋ฌดํ•œ ๋ฐ˜๋ณต
			๋ฉ”์‹œ์ง€ ๋ฐ›์•„์„œ ์ถœ๋ ฅ

์„œ๋ฒ„ ํด๋ž˜์Šค
	ํฌํŠธ ๋ฒˆํ˜ธ
	์„œ๋ฒ„ ์†Œ์ผ“
	ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜

	๋ฉ”์ธ
		์„œ๋ฒ„ ์‹คํ–‰
		๋ฌดํ•œ ๋ฐ˜๋ณต
			ํด๋ผ์ด์–ธํŠธ ์ ‘์† ํ—ˆ์šฉ
			๋ณ€์ˆ˜์— ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์ถ”๊ฐ€
			ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ
			์Šค๋ ˆ๋“œ ์‹คํ–‰


๋ฉ”์‹œ์ง€ ์†ก์‹  ์Šค๋ ˆ๋“œ
	๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ์ฝ”๋“œ๋ฅผ ๋ฌดํ•œ ๋ฐ˜๋ณต
๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์Šค๋ ˆ๋“œ
	๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ๋ฌดํ•œ ๋ฐ˜๋ณต

ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค
	๋ฉ”์ธ
		์„œ๋ฒ„ ์ฃผ์†Œ
		์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ
		์†Œ์ผ“

		๋ฉ”์‹œ์ง€ ์†ก์‹  ์Šค๋ ˆ๋“œ ์ƒ์„ฑ
		๋ฉ”์‹œ์ง€ ์†ก์‹  ์Šค๋ ˆ๋“œ ์‹คํ–‰

		๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์Šค๋ ˆ๋“œ ์ƒ์„ฑ
		๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์Šค๋ ˆ๋“œ ์‹คํ–‰

		๋ฌดํ•œ ๋ฐ˜๋ณต

 

์†Œ์ผ“ ํ†ต์‹  ํ”„๋กœ๊ทธ๋žจ: OSI 7๊ณ„์ธต์—์„œ 4๊ณ„์ธต๊นŒ์ง€ ์•Œ์•„์„œ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ
3๊ณ„์ธต ์ฃผ์†Œ : IP์ฃผ์†Œ
4๊ณ„์ธต ์ฃผ์†Œ: ํฌํŠธ ๋ฒˆํ˜ธ


์„œ๋ฒ„ ์ฝ”๋“œ

Server.java

package day07.project;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiThreadServer {
    static List<Socket> socketList = new ArrayList<Socket>();
    static Map<String, Socket> idSocket = new HashMap<>();

    public static void main(String[] args) {
        int port = 3424;

        try
        {
            ServerSocket serverSocket = new ServerSocket(port);

            while (true)
            {
                Socket socket = serverSocket.accept();
                socketList.add(socket);

                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader bir = new BufferedReader(isr);

                //์•„์ด๋”” ์ฝ์–ด ์˜ค๊ธฐ
                String id = bir.readLine();
                System.out.println(id + "๋‹˜์ด ์ž…์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.");

                //์‚ฌ์šฉ์ž ์•„์ด๋”” ์ €์žฅ
                idSocket.put(id,socket);

                Thread mpt = new MessageProcessThread(socket);
                mpt.start();
            }
        }
        catch (IOException e)
        {
            throw new RuntimeException(e);
        }


    }
}

 

MessageProcessThread.java

package day07.project;

import javax.sound.midi.MidiSystem;
import java.io.*;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MessageProcessThread extends Thread {
    Socket socket;

    public MessageProcessThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try {
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader bir = new BufferedReader(isr);

            while (true) {
                String message = bir.readLine();
                System.out.println(message);

                //ํ˜„์žฌ ์ ‘์† ์ค‘์ธ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
                if (message.contains("์‚ฌ์šฉ์ž ๋ชฉ๋ก")) {
                    for (int i = 0; i < MultiThreadServer.socketList.size(); i++) {
                        Socket client = MultiThreadServer.socketList.get(i);
                        OutputStream os = client.getOutputStream();
                        OutputStreamWriter osw = new OutputStreamWriter(os);
                        BufferedWriter bw = new BufferedWriter(osw);
                        for (String s : MultiThreadServer.idSocket.keySet())
                            bw.write(s + "\n");
                        bw.flush();
                    }

                }
                //1๋Œ€ 1 ์ฑ„ํŒ… ๊ตฌํ˜„
                else if (message.startsWith("To:")) {

                    String user = message.split(":")[1];
                    Socket s = MultiThreadServer.idSocket.get(user);

                    String msg = message.split(":")[2];
                    OutputStream os = s.getOutputStream();
                    OutputStreamWriter osw = new OutputStreamWriter(os);
                    BufferedWriter bw = new BufferedWriter(osw);
                    bw.write("ONETOONE: ");
                    bw.write(msg + "\n");
                    bw.flush();
                } else {
                    for (int i = 0; i < MultiThreadServer.socketList.size(); i++) {

                        Socket client = MultiThreadServer.socketList.get(i);
                        OutputStream os = client.getOutputStream();
                        OutputStreamWriter osw = new OutputStreamWriter(os);
                        BufferedWriter bw = new BufferedWriter(osw);
                        bw.write(message + "\n");
                        bw.flush();
                    }
                }
            }
        }
        catch(IOException e){
            throw new RuntimeException(e);
        }
    }
}

 


ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ

Client.java

package day07;

import day07.ReceiveMsgThread;
import day07.SendMsgThread;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        String serverIp = "192.168.0.126";
        int serverPort = 3424;
        Socket cs;
        try
        {
            cs= new Socket(serverIp, serverPort);
            Thread sendMsgThread = new SendMsgThread(cs);
            sendMsgThread.start();

            Thread receiveMsgThread = new ReceiveMsgThread(cs);
            receiveMsgThread.start();

            while(true)
            {

            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

 

ReceiveMessageThread.java

package day07;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class ReceiveMsgThread extends Thread{
    Socket socket;

    public ReceiveMsgThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try
        {
            InputStream  is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader bir = new BufferedReader(isr);
            while (true)
            {
                String data = bir.readLine();
                System.out.println(data);
            }

        }
        catch (IOException e)
        {
            throw new RuntimeException(e);
        }

    }
}

 

SendMessageThread.java

package day07;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class SendMsgThread extends Thread{
    Socket socket;

    public SendMsgThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try {
            Scanner sc = new Scanner(System.in);
            OutputStream os = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);

            System.out.print("์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
            String id = sc.nextLine();
            bw.write(id + "\n");
            bw.flush();

            while(true) {
                System.out.print("๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
                String str = sc.nextLine();

                bw.write(str + "\n");
                bw.flush();

            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

์‹คํ–‰ ๊ฒฐ๊ณผ 

Server
Client ๋ผ๋ฆฌ ํ†ต์‹