ํด๋ผ์ด์ธํธ ๋ฉ์์ง ์ฒ๋ฆฌ ์ค๋ ๋
์์ผ
์์ฑ์(์์ผ)
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);
}
}
}
์คํ ๊ฒฐ๊ณผ
'โก๐ฉโ๐ป โก > ยบ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ฐ์ํ ํ ํฌ์ฝ์ค | ๋ก๋ (0) | 2023.11.29 |
---|---|
[Java] ๋๋์ ํ๊ณ ์์์ ์ฌ๋ฆผํ๊ธฐ | ์์์ ์ฌ๋ฆผ - Math.ceil (0) | 2023.11.29 |
[Java ์ปฌ๋ ์ ํ๋ ์์ํฌ] HashMap (0) | 2023.11.27 |
[Java] ์ ๊ทผ ์ ์ด์ (public, protected, default, private), ์ ์ด์ static, final (0) | 2023.11.27 |
[Java] ์ถ์ ํด๋์ค vs ์ธํฐํ์ด์ค (0) | 2023.11.27 |