KITRI/JAVA

Java ν”„λ‘œκ·Έλž˜λ° - μ±„νŒ… ν”„λ‘œκ·Έλž¨

λ˜νš¨λ‹ˆ 2020. 5. 25. 15:37

 

μ±„νŒ…ν”„λ‘œκ·Έλž¨

 

ServerReceiver.java

package network06.Chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;

public class ServerReceiver extends Thread{
	private Socket socket;
	
	public ServerReceiver(Socket socket) {
		this.socket = socket;
	}
	@Override
	public void run() {
		BufferedReader br = null;
		
		try {
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()), 512);
			
			while(true) {
				String inputMsg = br.readLine();
				
				if(inputMsg.equalsIgnoreCase("Q")) {
					System.out.println("μ±„νŒ…λ°©μ„ λ‚˜κ°€μ…¨μŠ΅λ‹ˆλ‹€.");
					break;
				}
				System.out.println(inputMsg);
			}
		} catch (NullPointerException | SocketException e) {
			System.out.println("μ±„νŒ…μ΄ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); //ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ socket close null λ°˜ν™˜
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(br!=null) br.close();
				if(socket!=null) socket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

ServerEx.java

package network06.Chat;

import java.net.ServerSocket;
import java.net.Socket;

public class ServerEx {

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		
		try {
			serverSocket = new ServerSocket(8989);
			System.out.println("μ„œλ²„ μ±—νŒ… 쀀비쀑...");
			
			Socket socket = serverSocket.accept();
			
			ServerReceiver receiver = new ServerReceiver(socket);
			receiver.start();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(serverSocket!=null) serverSocket.close();
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

	}

}

 

ClientSender.java

package network06.Chat;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientSender extends Thread{
	private Socket socket;
	private String nickName;
	
	public ClientSender(Socket socket, String nickName) {
		this.socket = socket;
		this.nickName = nickName;
	}
	
	@Override
	public void run() {
		BufferedWriter bw = null;
		PrintWriter pw = null;
		Scanner sc = null;
		
		try {
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()), 512); 
			pw = new PrintWriter(bw);
			sc = new Scanner(System.in);
			
			while(true) {
				String outputMsg = sc.nextLine();
				
				if(outputMsg.equalsIgnoreCase("q")) {
					pw.println(outputMsg);
					pw.flush();
					break;
				}
				
				pw.println(nickName + ">>>" + outputMsg);
				pw.flush();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(bw!=null) bw.close();
				if(pw!=null) bw.close();
				if(sc!=null) bw.close();
				if(socket!=null) socket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

ClientEx.java

package network06.Chat;

import java.net.Socket;

public class ClientEx {

	public static void main(String[] args) {
		if(args.length!=1) {
			System.out.print("λ‹‰λ„€μž„ ν•˜λ‚˜λ§Œ μž…λ ₯ν•˜μ„Έμš”:");
			return;
		}
		
		try {
			String nickName = args[0];
			Socket socket = new Socket("λ‚΄ 아이피 μ£Όμ†Œ", 8989);
			
			ClientSender sender = new ClientSender(socket, nickName);
			sender.start();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

λ‚΄ ip μ£Όμ†Œ 체크

 

 

network > chat 폴더에 μž‘μ„±ν•œ μžλ°”νŒŒμΌμ„ λ³΅μ‚¬ν•΄μ„œ λΆ™μ—¬λ„£κΈ°ν•œλ‹€.

λ©”λͺ¨μž₯으둜 μ—΄κ³  λ‚œ ν›„ νŒ¨ν‚€μ§€λͺ…을 μ§€μš°κ³ , λ‹€λ₯Έμ΄λ¦„μœΌλ‘œ μ €μž₯ > ansi둜 ν•˜κ³  λͺ¨λ“ νŒŒμΌ 

 

C:\sohyunkim\java\network\chat

 

컴파일(java filename.javaλͺ…λ Ή μ‹€ν–‰) 후에 .class 파일이 μƒμ„±λœ 것을 확인할 수 μžˆλ‹€.

 

 

 

단체 μ±„νŒ… ν”„λ‘œκ·Έλž¨

 

ClientEx.java

package network07.ChatMulti;

import java.net.Socket;

public class ClientEx {

	public static void main(String[] args) {
		
		try {
			
			Socket socket = new Socket("192.168.0.23", 7575);
			
			ClientSender sender = new ClientSender(socket, "haha");
			sender.start();
			
			ClientReceiver receiver = new ClientReceiver(socket);
			receiver.start();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


ClientReceiver.java

package network07.ChatMulti;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;


public class ClientReceiver extends Thread{
	private Socket socket;
	public ClientReceiver(Socket socket) {
		this.socket = socket;
	}
	
	@Override
	public void run() {
		BufferedReader br = null;
		
		try {
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()), 512);
			while(true) {
				String inputMsg = br.readLine();
				
				if(inputMsg.equalsIgnoreCase("Q")) {
					System.out.println("μ±„νŒ…λ°©μ„ λ‚˜κ°€μ…¨μŠ΅λ‹ˆλ‹€.");
					break;
				}
				System.out.println(inputMsg);
			}
		} catch (NullPointerException | SocketException e) {
			System.out.println("μ±„νŒ…μ΄ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(br!=null) br.close();
				if(socket!=null) socket.close();
			} catch(Exception e) {
				e.printStackTrace();
			}
		}
	}
}

ClientSender.java

package network07.ChatMulti;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientSender extends Thread{
	private Socket socket;
	private String nickName;
	
	public ClientSender(Socket socket, String nickName) {
		this.socket = socket;
		this.nickName = nickName;
		
		System.out.println("μ±„νŒ… μ‹œμž‘μž…λ‹ˆλ‹€.");
	}
	
	@Override
	public void run() {
		BufferedWriter bw = null;
		PrintWriter pw = null;
		Scanner sc = null;
		
		try {
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()), 512); 
			pw = new PrintWriter(bw);
			sc = new Scanner(System.in);
			
			while(true) {
				String outputMsg = sc.nextLine();
				
				if(outputMsg.equalsIgnoreCase("q")) {
					pw.println(outputMsg);
					pw.flush();
					break;
				}
				
				pw.println(outputMsg);
				pw.flush();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(bw!=null) bw.close();
				if(pw!=null) pw.close();
				if(sc!=null) sc.close();
				if(socket!=null) socket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

ServerArr.java

package network07.ChatMulti;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class ServerArr extends Thread{
	private Socket socket;
	public static List<PrintWriter> list = Collections.synchronizedList(new ArrayList<PrintWriter>());
	private PrintWriter pw;
	
	public ServerArr(Socket socket) { //[0]pw 홍길동/ [1]pw 김길동
		this.socket = socket;
		sendArr();
	}
	
	public void sendArr() {
		try {
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()), 152);
			pw = new PrintWriter(bw);
			
			list.add(pw);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void sendPrintAll(String str) {
		for(PrintWriter pw:list) {
			pw.println(str);
			pw.flush();
		}
	}
	
	@Override
	public void run() {
		BufferedReader br = null;
		String nickName = null;
		
		try {
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()), 512);
			nickName = br.readLine();
			
			sendPrintAll("#" + nickName + "λ‹˜μ΄ λ“€μ–΄μ˜€μ…¨μŠ΅λ‹ˆλ‹€.");
			
			while(true) {
				String inputMsg = br.readLine();
				if(inputMsg.equalsIgnoreCase("Q")) {
					sendPrintAll("#" + nickName + "λ‹˜μ΄ μ±„νŒ…λ°©μ„ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.");
					break;
				}
				
				sendPrintAll(nickName + ">>" + inputMsg);
			}
		} catch(SocketException | NullPointerException e) {
			sendPrintAll("#" + nickName + "λ‹˜μ΄ μ±„νŒ…λ°©μ„ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.");
		} catch (Exception e) {

		}
	}
	
}

ServerEx.java

package network07.ChatMulti;

import java.net.ServerSocket;
import java.net.Socket;

public class ServerEx {

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		
		try {
			serverSocket = new ServerSocket(7575);
			System.out.println("μ„œλ²„ μ±—νŒ… 쀀비쀑...");			
			
			while(true) {
				Socket socket = serverSocket.accept(); 
				
				ServerArr arr = new ServerArr(socket);
				arr.start();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(serverSocket!=null) serverSocket.close();
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

	}

}

cmd μ°½μ—μ„œ

javac ServerArr.java, javac ServerEx.java, java ServerEx(μ„œλ²„μ„ΈνŒ…)

μ—¬λŸ¬κ°œμ˜ cmdμ°½μ—μ„œ

javac ClientReceiver.java , javac ClientSender.java, javac ClientEx.java, java ClienEx 

λ°˜μ‘ν˜•