1. TCP/IP
· TCP 프로토콜: 데이터 전송 관련된 걸 담당 (email, FTP, HTTP)
· IP 프로토콜: 패킷 교환 네트워크에서 송신-수신 호스트의 데이터 전송 담당
· IP 주소: 유일하게 식별 가능한 네트워크 장치의 주소.(localhost의 IP주소는 127.0.0.1)
· DNS(Domain Name System) 서버 : 도메인 이름(문자열)을 IP주소(숫자)로 자동변환해줌
· 포트: 한 컴퓨터 내의 각 응용프로그램이 자신을 식별할 수 있도록 생성된 가상 연결단. 포트번호는 개발자가 임의 선택 가능
* IP주소는 아파트의 동, 포트는 호수.
통신을 수행하는 응용프로그램들은 IP주소와 포트를 이용해 상대편 응용프로그램 인지
2. 소켓
- 개발자가 TCP/IP 네트워크 이용해 쉽게 통신프로그램 작성할 수 있도록 지원
- 소켓은 포트와 연결되어 해당 응용프로그램 식별.
- 응용프로그램은 소켓과 연결 후 소켓에 데이터 주면 소켓이 인터넷 경유하여 데이터 주고받음.
[소켓통신 전체 구조]
·서버 소켓 : 클라이언트의 접속을 기다리는 용도로만 사용. (클라이언트가 접속 시, 클라이언트 소켓을 추가로 만들어 통신하게 함)
·클라이언트 소켓 : 데이터 통신 용도
3. Socket 클래스
- 클라이언트 소켓
- java.net 패키지에 포함된 클래스 (import java.net.*;)
[Socket 클래스 생성자]
[Socket 클래스 메소드]
[1. 클라이언트 소켓 생성]
// ip주소 128.12.1.1, 포트번호 5500인 서버에 연결하기 위해 소켓 객체 생성, 자동 접속됨.
Socket clientSocket = new Socket("128.12.1.1", 5500);
// 빈 소켓 객체 생성 뒤 서버에 접속하는 방법:
Socket clientSocket = new Socket(); // 연결되지 않는 소켓 생성
clientSocket.bind(new InetSocketAddresss("192.168.1.1", 1234)); // 소켓에 자신의 ip와 로컬포트 결합
clientSocket.connect(new InetSocketAddresss("128.12.1.1", 5500)); // 서버 응용프로그램에 접속
[2. 네트워크 입출력 스트림 생성]
- 서버와 데이터 주고받을 소켓 스트림 얻어내고 버퍼스트림에 연결
// 문자만 주고받을 수 있는 문자 입출력 스트림
BufferReader in = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
BufferReader out = new BufferedWriter(new
OutputStreamWriter(clientSocket.getOutputStream()));
[3. 서버에 데이터 전송]
out.write("hi" + "\n"); // 서버에서 라인 단위('\n')로 수신한다고 가정
out.flush(); // 스트림 속 데이터를 즉각 전송.(out은 버퍼가 다 차기 전까지는 데이터 보내지 않기때문)
[4. 서버로부터 데이터 수신]
int ch = in.read(); // 서버로부터 한 개의 문자 수신
String line = in.readLine(); // 서버로부터 한 줄('\n')의 문자열 수신
[5. 데이터 송수신 종료]
socket.close();
4. ServerSocket 클래스
- 서버소켓
- java.net 패키지 (import java.net.*;)
- 클라이언트로부터 연결 요청 기다리는 목적. 데이터 송수신에 사용되지 않음.
- 클라이언트가 접속하면 Socket 객체를 별도 생성, Socket 객체가 클라이언트와 데이터 주고받음.
[ServerSocket 생성자]
[ServerSocket 메소드]
[1. 서버 소켓 생성]
ServerSocket mylistener = new ServerSocket(9999); // 포트번호는 자신의 포트번호
[2. 클라이언트 접속 대기]
- accept() 메소드 이용해 클라이언트의 연결 요청 기다림.
- 연결 수락시, accept()에서 Socket 객체를 별도 생성하여 리턴
Socket socket = mylistener.accept();
[3. 네트워크 입출력 스트림 생성]
[4. 클라이언트로 데이터 송수신]
[5. 데이터 송수신 종료]
: 위 Socket 클래스와 동일
[6. 서버 응용프로그램 종료]
serverSocket.close();
명품 Java Programming 참고
'개념 정리 > Java' 카테고리의 다른 글
[JAVA] 빠른 입출력 (BufferedReader, BufferedWriter, StringBuilder), 문자열 분리 (0) | 2024.02.21 |
---|---|
[JAVA] 스레드 (1) | 2023.10.31 |
[JAVA] 그래픽 (1) | 2023.10.26 |
[JAVA] 스윙 컴포넌트(JLabel, JButton, JCheckBox, JRadioButton, JTextField, JList, JComboBox) (0) | 2023.10.26 |
[JAVA] 이벤트, 리스너, key 이벤트, 마우스 이벤트 (0) | 2023.10.25 |