서버

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

	public EchoServer() {
		ServerSocket ss;
		try {

			// 1. 서버소켓 생성
			ss = new ServerSocket(3000);
			System.out.println("서버 구동됨");

			// 2. 클라이언트의 접속을 기다림
			// 서버소켓은 클라이언트의 연결요청이 접수되면
			// 해당 클라이언트의 소켓과 송수신할 수 있는 소켓을 생성
			// 그리고 해당 소켓을 이용해서 접속된 클라이언트의
			// ip 정보를 지니고 있는 inetAddress객체를 얻을 수 있다.
			// accept() 메소드는 클라이언트의 연결요청이 있을 때까지 대기
			// block method이다.
			Socket s = ss.accept();
			System.out.println("클라이언트와 연결할 소켓생성됨");

			// 접속한 클라이언트의 IP 정보 얻기
			InetAddress inetAddress = s.getInetAddress();
			String clientIp = inetAddress.getHostAddress();
			System.out.println("[" + clientIp + "] 가 접속됨");
			
			// 3. 소켓으로부터 inputStream과 outputStream 얻기
			InputStream is = s.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);

			OutputStream os = s.getOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(os);
			BufferedWriter bw = new BufferedWriter(osw);

			// 4. clinet가 전송한 메세지 읽기
			String message = br.readLine();
			System.out.println("[메세지]" + message);

			// 5. clinet로 메시지 전송하기
			bw.write("[" + clientIp + "] 님 환영합니다. \n");
			bw.flush();

		} catch (IOException e) {
			// 서버소켓 생성시 지정된 port가 다른 프로그램에서
			// 사용 중일 때 예외발생한다.
			System.out.println("해당 port는 사용 중 입니다.");
			e.printStackTrace();
		}

	}

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


클라이언트

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class EchoClient {
	public EchoClient() {

		Socket s;
		try {
			// 1. 서버와 통신할 소켓 생성
			// 연결한 서버의 ip와 port번호를 지정한다.
			// 소켓을 생성하는 순간 해당 ip의 port번호로 연결을 요청한다.
			s = new Socket("localhost", 3000);

			// 2. 소켓으로부터 inputStream과 outputStream 얻기

			OutputStream os = s.getOutputStream();
			InputStream is = s.getInputStream();
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			BufferedReader br = new BufferedReader(new InputStreamReader(is));

			// 3. 서버에 메세지 전송하기
			bw.write("반갑습니다. 클라이언트 입니다.\n");
			bw.flush();

			// 4. 서버가 보낸 메세지 읽기
			String message = br.readLine();
			System.out.println("[서버가 보낸 메세지]" + message);
		} catch (UnknownHostException e) {
			// ip에 해당하는 서버를 찾을 수 없을 경우
			System.out.println("서버를 찾을 수 없습니다.");
			e.printStackTrace();
		} catch (IOException e) {
			// 해당 port번호에 어떤 서비스도 존재하지 않는 경우
			System.out.println("사용되지 않는 port번호입니다.");
			e.printStackTrace();
		}
	}

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


+ Recent posts