Backend/JAVA

JAVA(9)-네트워크(2)(Echo server/client 만들기 과정)

creativeDeveloper! 2022. 9. 25. 10:10
728x90

1. echo 서버란?

Client 와 Server 가 접속 했다면 Stream 을 통해 data 를 전송 할 수 있다.
받은 내용을 그대로 응답하는-> 메아리 개념

 

강사님께서 채팅과정이 이해가 안가면 echo까지만 하라고 하셔서

사실 이 과정도 잘 이해가 안가지만 나름대로 주석을 분석해서 내 언어로 바꿔보았다.

 

2. 진행과정

1) 우선 server가 먼저 실해중이어야 응답을 client로부터 응답을 받을 수 있으므로 server class를 먼저 만들어준다.

2) Server Socket 생성

3) Client 가 들어오고 싶어하는 IP 개방

4) Client 의 요청 대기

5) Input Stream 으로 데이터 수신

6) Output Stream 으로 데이터 발신

7) Socket 자원 반납

8) 종료

public class Server {

	public static void main(String[] args) throws Exception {
		
		//서버 먼저 만들어줘야한다.->서버는 소켓을 통해서 생성해야한다.
		//서버는 클라이언트로부터 요청이 와야하므로 자기것을 먼저내보내야해서 input 후 output
		
		//소켓 생성하기
		ServerSocket server=new ServerSocket(7777);//7777포트 열기
		while (true) {
			Socket socket=server.accept();//서버가 요청을 받아드리면 요청대기중이라는 문구가 출력된다.
			System.out.println("요청 대기중");
			InetSocketAddress addr=(InetSocketAddress)socket.getRemoteSocketAddress();
			System.out.println("접속>"+addr.getAddress()+addr.getPort());
			//이제 서버가 들어온 요청을 읽어줘야한다.
			InputStream is=socket.getInputStream();
			//보조스트림을 이용해서속도 향상시키기!
			ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(is));
			//데이터읽기
			String txt=ois.readUTF();
			System.out.println(addr.getAddress()+":"+addr.getPort()+">"+txt);
			
			//읽은 내용 서버에서 내보내기->outputstream을 이용->이번에도 소켓을 통해서
			OutputStream os=socket.getOutputStream();
			ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(os));
			
			oos.writeUTF(txt);
			oos.flush();
			//자원해제
			ois.close();
			oos.close();
			socket.close();
			
		}

9) client 클래스를 만들어준다.

10) socket 생성

11) socket을 통해 접속 요청

12) Output Stream 으로 데이터 발신

13) Input Stream 으로 데이터 수신

14) Socket 자원반납

15) 종료

public class Client {

	public static void main(String[] args) throws Exception, IOException {
		//서버에 요청을 하는 클라이언트 ==나
		//client입장에서는 server에서 내보낸요청을 받아드려야하는것이라
		//output한 후 input
		
		//이번에도 소켓을 통해 서버접속을 요청해야 한다.(output)
		Socket socket=new Socket("localhost", 7777);
		OutputStream os=socket.getOutputStream();
		//요청을 했으면 소켓을 통해 가져오기
		//보조스트림 사용하기
		ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(os));
		
		//스캐너를 통해 입력한 문자를 가져올것
		System.out.println("입력해주세요");
		Scanner scan=new Scanner(System.in);
		String txt=scan.nextLine();
		oos.writeUTF(txt);
		oos.flush();
		
		//서버요청을 했고 서버가 수락을 했으니
		//서버로부터 응답을 들어야한다.->input
		//마찬가지로 socket을 통해가져오기
		InputStream is=socket.getInputStream();
		ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(is));
		String msg=ois.readUTF();
		System.out.println("서버에서 보낸 메세지"+msg);
		//자원해제
		ois.close();
		oos.close();
		socket.close();		
	}

}

 

나중에 플젝때 필요하면 참고해야지!

728x90