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 |