Echo System?

  • 자바의 소켓을 이용하여 채팅(멀티캐스팅)을 구현하기 위한 기초적인 학습!
  • 단순히, 내가 보낸 메시지를 내가 받아서 콘솔에 메아리치는(Echo) 프로그램 
  • 클라이언트는 Telnet을 사용

1) Telnet 기능 켜기

- 윈도우사용자의 경우, 제어판으로 들어가 Windows 기능 켜기/끄기를 눌러 Telnet 클라이언트를 체크한다음 확인을 눌러준다.

 

2) 서버 구현

  

  • 자신이 원하는 클래스명으로 클래스 생성
  • 하나의 클래스에서 실행을 하기 위해 main메서드 생성
  • ServerSocket 인스턴스를 사용하기 위해 멤버변수 생성
  • 포트번호는 1~1024번까지는 이미 시스템이 점유하므로 점유불가! 

 

 

 

 

 

 

 

 

 

 

  • ServerSocket은 서버를 열어놓고 accept()메서드를 이용하여 접속자가 들어올 때까지 Block상태로 대기한다.

 

 

 

 

 

 

  • ServerSocket으로부터 accpet()된 요청의 클라이언트와 메시지를 주고받기 위해선 Socket객체를 반환받아야한다.
  • Socket객체로부터 InputStream을 반환받아 클라이언트로부터 보낸 메시지를 콘솔창에 뿌릴 수 있다.

 

 

 

 

 

 

package day1109.echo;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer2 {
	ServerSocket server;
	int port = 9999;

	public EchoServer2() {
		try {
			server = new ServerSocket(port);
			System.out.println("서버 소켓 생성완료!");
			
			Socket socket = server.accept();
			System.out.println("접속자 발견!");
			
			//반환받은 소켓을 이용하면, 현재 접속자에 대한 정보를 구할 수 있다.
			InetAddress inet = server.getInetAddress();
			String ip = inet.getHostAddress();
			System.out.println(ip);
			
			//클라이언트가 보낸 메시지 받기!! 
			//(메시지를 받는 것은 실행중인 프로그램으로 데이터가 들어오는 것이므로
			//입력 스트림으로처리해야한다!!)
			//소켓으로부터 스트림을 뽑아낼 수 있다!
			InputStream is =socket.getInputStream();//바이트기반(한글깨짐, 영문만)
			
			int data=1;
			while(data!=10) {
				System.out.print((char)data);//1byte읽어들임...
			}
			socket.close();
			server.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new EchoServer2();
	}
}

cf. ServerSocket과 Socket의 차이는? 

ServerSocket : 말그대로 서버 프로그램에서만 사용하는 소켓이다. 서버소켓은 클라이언트로부터 연결 요청이 오기를 기다렸다가 연결 요청이 들어오면 클라이언트와 연결을 맺고 다른 소켓을 만드는 일을 한다.

Socket : 서버에 접속하기 위한 클라이언트를 구현는 사용하는 클래스

 

'프로그래밍 > Java' 카테고리의 다른 글

java - mail 보내기  (0) 2021.01.06
싱글톤 패턴 알아보기  (0) 2020.12.14
JavaFX - 개발환경 구축 및 생명주기  (0) 2020.11.23
Java - JSON & XML 파싱  (0) 2020.11.17
Java - JDBC(Java DataBase Connectiviy) 사용법  (0) 2020.11.05

+ Recent posts