[JAVA] 네트워크
TCP/IP 프로토콜
-
TCP : Transmission Control Protocol
- 두 시스템 간에 신뢰성 있는 데이터의 전송을 관장하는 프로토콜 -
IP : Internet Protocol
- 패킷 교환 네트워크에서 호스트간 데이터를 주고 받는 것을 관장하는 프로토콜
cf. OSI 7계층 관련 글
cf. TCP vs UDP 관련 글
cf. IP주소, 포트 번호, URL 관련 글
자바의 URL 클래스
- java.net 패키지에 포함
URL 객체 생성 방법
- 절대 경로로 URL 객체 생성
URL myGithub = new URL("https://github.com/ruthetum");
- 상대 경로로 URL 객체 생성
URL repo = new URL(myGithub, "speech-to-text-icampus");
// repo 객체가 담은 URL은 https://github.com/ruthetum/speech-to-text-icampus
- 잘못된 주소의 URL을 입력할 경우 MalformedURLException 예외 발생
예제 : URL 주소에서 데이터(html) 읽기
public static void main(String[] args) {
URL myGithub = null;
try {
myGithub = new URL("https://github.com/ruthetum");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(myGithub.openStream()));
String html;
while ((html = bufferedReader.readLine()) != null) { // 한 줄씩 읽기
System.out.println(html);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
URLConnection 클래스
- 주어진 원격지의 주소 URL에 네트워크 접속 후 데이터를 보내거나 받을 수 있도록 하는 기능
- 단순히 url에 접속하는 것도 가능하지만 파라미터를 설정해서 값을 넣어줄 수도 있음
- 자바로 크롤링을 할 경우 Jsoup 패키지를 참고하자
URL url = new URL("https://github.com/ruthetum");
URLConnection conn = url.openConnection();
서버에 데이터를 보내기 위한 단계
- 자바 프로그램이 웹 서버에 데이터를 보내기 위해 필요한 단계
- URL 생성
- URL 객체에서 URLConnection 객체를 얻어옴
- setDoOutput() 메소드로 doOutput 필드를 true로 설정
- connect() 메소드로 연결 설정
- 연결에서 출력 스트림을 얻음
- 출력 스트림에서 데이터를 출력
- 출력 스트림을 close() 메소드로 닫음
소켓 프로그래밍
Socket(소켓)
- 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 끝 단을 의미
- 소켓은 특정 포트 번호와 연결되어 있음
- 자바에서 데이터 통신 시 소켓 사용
- 서버 소켓, 클라이언트 소켓으로 구성
ServerSocket 클래스
- 서버 소켓에 사용되는 클래스
- java.net 패키지에 포함
- 주요 생성자
- 주요 메소드
- 예제 코드
// 서버 소켓 생성
ServerSocket server = new ServerSocket(5000);
// 클라이언트 접속 대기
Socket socket = server.accept();
// 네트워크 입출력 스트림 생성
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter((new OutputStreamWriter(socket.getOutputStream()));
// 클라이언트로부터 데이터 수신
String line = in.readline(); // 한 행 수신
// 클라이언트에게 데이터 전송
out.write("Hello, Client\n");
out.flush();
// 네트워크 접속 종료
socket.close();
// 서버 종료
server.close();
- flush를 호출하면 스트림 속에 데이터를 남기지 않고 모두 전송
Socket 클래스
- 클라이언트 소켓에 사용되는 클래스
- java.net 패키지에 포함
- 주요 생성자
- 주요 메소드
- 예제 코드
// 클라이언트 소켓 생성
Socket client = new Socket("128.12.1.1", 5000);
// 네트워크 입출력 스트림 생성
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter out = new BufferedWriter((new OutputStreamWriter(client.getOutputStream()));
// 서버로 데이터 전송
out.write("hello\n");
out.flush;
// 접속 종료
client.close();
예제 : 채팅 프로그램 만들기
이미지 출처 : 명품 JAVA 프로그래밍 (황기태, 김효수 저)
Author And Source
이 문제에 관하여([JAVA] 네트워크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ruthetum/JAVA-네트워크저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)