package ch01_socket;

import java.net.ServerSocket;
import java.net.Socket;

/*
 * # 서버, 클라이언트
 * → 서버       : 클라이언트에게 네트워크를 통해서 서비스를 제공하는 시스템.
 *   클라이언트 : 서버와 대응되는 개념으로, 서비스를 사용하는 사용자.
 * 
 * # Socket
 * → 서버와 클라이언트 간에 통신을 할 수 있도록 해주는 연결 통로.
 * → 소켓은 특정 IP 포트 번호와 결합.
 * → 클라이언트는 Socket을 생성하고, 서버는 ServerSocket을 생성한 후에 이를 사용해서 Socket을 생성.
 * 
 * # PORT
 * → 0~65535까지 사용.
 * 	 > 0~1023      : well-known port
 *     1024~49151  : 서버 소켓으로 사용.
 *     49152~65535 : 동적 포트.
 */
public class ExServer {

	public static void main(String[] args) {
		
		// 서버
		ServerSocket listener = null;
		Socket socket = null;
		
		try {
			listener = new ServerSocket(10000); // 서버 소켓 생성.
			System.out.println("- Server 준비 -");
			socket = listener.accept(); // 클라이언트부터 연결 요청 대기.
			System.out.println("접속 정보 : " + socket.toString());
		} catch (Exception e) {
			System.out.println("서버 error");
			
		} finally {
			try {
				if(socket != null) socket.close();
				if(listener != null) listener.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			
		}
		
	}
}
package ch01_socket;

import java.net.Socket;

public class Exclient {
	
	public static void main(String[] args) {
		
		// 클라이언트
		Socket socket =null;
		try {
			socket = new Socket("localhost",10000);
		} catch (Exception e) {
			System.out.println("클라이언트 error");
		} finally {
			try {
				if(socket!=null) socket.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}