윈도우는 이클립스 창 열린 상태로 이클립스 한번 더 누르면 창이 하나 더 켜지는데 맥은 켜지지 않는다
- 터미널 열기
- open -n /Applications/Eclipse.app 입력
** eclipse 반드시 Applications에 들어가 있어야 열림 !
-
서버 : 서비스를 제공하는 프로그램 또는 컴퓨터
-
클라이언트 : 서비스를 요청하여 사용하는 프로그램 또는 컴퓨터
-
IP주소 : Internet Protocol 네트워크 상에서 컴퓨터를 식별하는 번호
--> 프로토콜 Protocol : 통신방법에 대한 규약 - 접속이나 전달방식, 데이터의 형식, 검증방법 등을 맞추기 위한 약속
-
포트 Port : 같은 컴퓨터 내에서 프로그램을 식별하는 번호
** 클라이언트는 서버 연결 요청 시 IP주소와 포트 번호를 알아야 함!!
-
TCP(Transmission Control Protocol) : 데이터 전달의 신뢰성을 최대한 보장하기 위한 방식으로 연결지향형 통신. 순차적으로 데이터를 전송하고 확인 및 오류 시 재전송 --> 금융기관, 기차표 예매
-
UDP(User Datagram Protocol) : 데이터의 빠른 전달을 보장하기 위한 방식으로 비연결 지향형 통신. 확인 및 재전송 작업이 없다 --> 스트리밍 서비스
-
소켓 Socket : 프로세스 간의 통신에 사용되는 양쪽 끝 단
- TCP 소켓 프로그래밍
클라이언트와 서버 간의 1:1 소켓 통신
서버가 먼저 실행되어 클라이언트의 요청을 기다려야 하고 서버용 프로그램과 클라이언트용 프로그램을 따로 구현해야 함
java.net 패키지의 serverSocket, Socket 클래스 제공
<서버용 TCP 소켓 프로그래밍 순서>
- 서버의 포트번호 정함
int port = 8500;
- 서버용 소켓 객체 생성
ServerSocket serverSocket = new ServerSocket(port);
- 클라이언트 쪽에서 접속 요청이 오길 기다림
Socket clientSocket = serverSocket.accpet();
- 접속 요청이 오면 요청 수락 후 해당 클라이언트에 대한 소켓 객체 생성
String clientIP = clientSocket.getInetAddress().getHostAddress();
- 연결된 클라이언트와 입출력 스트림 생성
InputStream is = clientSocket.getInputStream();
OutputStream os = clientSocket.getOuputStream();
- 보조 스트림을 통해 성능 개선
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintWriter pw = new PrintWriter(os);
- 스트림을 통해 읽고 쓰기
pw.println("서버 접속 성공");
pw.flush();
====== 예외처리 필수 =======
8.통신종료 --> null인지 확인하고, 예외처리
br.close();
pw.close();
severSocket.close();
clientSocket.close();
<클라이언트용 TCP 소켓 프로그래밍 순서>
- 서버의 IP주소와 서버가 정한 포트번호를 매개변수로 하여 클라이언트용 소켓 객체 생성
String serverIP = "127.0.0.1"; --> 자기 자신을 가리키는 IP주소
int port = 8500;
Socket clientSocket = new Socket(serverIP, port);
- 서버와의 입출력 스트림 오픈
- 보조스트림을 통해 선능 개선
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream());
- 스트림을 통해 읽고 쓰기
String message = br.readLine();
Scanner sc = new Scanner(System.in);
System.out.print("입력 :");
String input = sc.nextLine();
pw.println(input);
pw.flush();
====== 예외처리 필수 =======
5. 통신종료 --> null인지 확인하고, 예외처리
br.close();
pw.close();
clientSocket.close();