JAVA/오라클

brave_chicken·2024년 4월 4일

잇(IT)생 챌린지

목록 보기
19/90

EchoServerTest03/EchoClientTest03

서버와 클라이언트가 키보드입력으로 1대1로 채팅하기 단, 순차적으로 작업

public class EchoServerTest03 {
	public static void main(String[] args) {
		Socket client = null;
		BufferedReader in = null;
		PrintWriter out = null;
		ServerSocket server = null;
		BufferedReader keyin = null;
		try {
			server = new ServerSocket(50000);
			System.out.println("클라이언트 접속을 기다림");
			while(true) {
				client = server.accept();
				String ip = client.getInetAddress().getHostAddress();
				System.out.println(ip+"접속");
				
				//클라이언트와 통신할 수 있는 Input/Output 스트림 클래스를 소켓에서 가져오기
				in = new BufferedReader(new InputStreamReader(client.getInputStream()));
				out = new PrintWriter(client.getOutputStream(),true);
				keyin = new BufferedReader(new InputStreamReader(System.in));
				
				String senM="";
				String reM="";
				while(true) {
					//서버 <- 클라이언트
					reM = in.readLine();
					if(reM==null) {
						break;
					}
					System.out.println("클라이언트>>>"+reM);
					
					//서버 -> 클라이언트
					senM = keyin.readLine();
					out.println(senM);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class EchoClientTest03 {
	public static void main(String[] args) {
		Socket sock = null;
		BufferedReader in = null; 
		PrintWriter out = null;
		BufferedReader keyin = null;
		
		try {
			//1.서버접속
			sock = new Socket("192.168.0.4",50000);
			
			//2.서버와 통신할 입출력스트림과 키보드로 입력하는 내용을 읽을 스트림을 생성
			in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
			out = new PrintWriter(sock.getOutputStream(),true);
			keyin = new BufferedReader(new InputStreamReader(System.in));
			
			String senM = "";//서버로 보낼 메세지
			String reM = "";//서버에서 받는 메세지
			while((senM=keyin.readLine())!=null) {
				//클라이언트 -> 서버(키보드입력한 데이터 보내기)
				out.println(senM);
				
				//클라이언트 <- 서버
				reM = in.readLine();
				System.out.println("서버>>"+reM);
				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


SingleChatServer


클라이언트로 부터 메시지를 받는 일만 하는 쓰레드

public class ServerReceiverThread extends Thread{
		Socket socket;//클라이언트
		
	public ServerReceiverThread(Socket socket) {
		super();
		this.socket = socket;
	}
	
	@Override
	public void run() {
		BufferedReader in = null;
		try {
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String reM ="";
			while((reM = in.readLine())!=null) {
				System.out.println("클라이언트>>"+reM);
			}
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}

서버가 입력한 메시지를 클라이언트로 보내는 작업을 처리하는 쓰레드

public class ServerSendThread extends Thread{
	Socket socket;
	
	public ServerSendThread(Socket socket) {
		super();
		this.socket = socket;
	}
	
	@Override
	public void run() {
		PrintWriter out =null;
		BufferedReader keyin =null;
		try {
			out = new PrintWriter(socket.getOutputStream(),true);
			keyin = new BufferedReader(new InputStreamReader(System.in));
			String senM ="";
			while((senM = keyin.readLine())!=null) {
				out.println(senM);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class SingleChatServer {
	public static void main(String[] args) {
		ServerSocket server = null;
		Socket client = null;
		try {
			server = new ServerSocket(12345);
			System.out.println("클라이언트 접속을 기다림");
			while(true) {
				//client가 접속하면 client의 정보를 Vector와 같은 동기화가 적용되어 있는 자료구조에 저장하는 작업
				client = server.accept();
				String ip = client.getInetAddress().getHostAddress();
				System.out.println(ip+"접속");
				
				//클라이언트와 통신하기 위한 쓰레드 두 개를 생성해서 start
				ServerReceiverThread ser_re_th = new ServerReceiverThread(client);
				ServerSendThread ser_sen_th = new ServerSendThread(client);
				
				ser_re_th.start();
				ser_sen_th.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

SingleChatClient

서버로 부터 메시지를 받는 일만 하는 쓰레드

public class ClientReceiverThread implements Runnable{
	Socket socket;

	public ClientReceiverThread(Socket socket) {
		super();
		this.socket = socket;
	}

	@Override
	public void run() {
		BufferedReader in =null;
		
		try {
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String reM;
			while((reM=in.readLine())!=null) {
				System.out.println("서버>>"+reM);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}
public class ClientSendThread implements Runnable{
	Socket socket;

	public ClientSendThread(Socket socket) {
		super();
		this.socket = socket;
	}

	@Override
	public void run() {
		BufferedReader keyin = null;
		PrintWriter out = null;
		
		try {
			out = new PrintWriter(socket.getOutputStream(),true);
			keyin = new BufferedReader(new InputStreamReader(System.in));
			String senM="";
			while((senM=keyin.readLine())!=null) {
				out.println(senM);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

서버와 통신하기 위한 클라이언트

public class SingleChatClient {
	public static void main(String[] args) {
		try {
			//서버로접속
			Socket socket = new Socket("192.168.0.4",12345);
			
			//서버와 통신할 쓰레드 객체를 생성해서 start
			new Thread(new ClientReceiverThread(socket)).start();
			new Thread(new ClientSendThread(socket)).start();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}	


Oracle_DB

계정생성미션

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글