-
13일차 - 네트워크(자바 끝~)프로그래밍 언어/자바(JAVA) 2024. 2. 8. 17:15
네트워크를 근간으로 웹 서비스를 제공함
과거 : 컴퓨터(데스크탑) 끼리만 연결되어서 망을 이룸
현재 : 다양한 형태 디바이스(ting)들이 연결됨
네트워크 기초
■ 네트워크의 첫번째 과제는 출발지에서 목적지까지 어떻게 찾고 갔느냐
IPV4 : 8bit, 2 의 32승 개 할당 가능
IPV6 : 다양한 디바이스가 등장해 IPV4 의 아이피 갯수가 부족해짐
2의 128승 개 할당가능
TCP : 연결 지향 프로토콜, UDP 보다 속도가 느리다
소켓 통신 : 소켓이 없으면 통신 자체가 안된다
서버가 먼저 켜져 있고 클라이언트 요청을 대기하고 있다
Echo 서버 : 클라이언트에서 서버에게 메세지를 보내면 똑같은 메시지를 응답해주는 서버이다
public class Code_Sender { // 파일 전송 및 읽어오기, 소켓 생성 등에서 예외가 발생할 경우 예외를 main 메소드로 전가한다 public static void main(String[] args) throws Exception { // 리시버에 연결하는 소켓을 생성한다 Socket socket = new Socket("192.168.70.136", 5500); // 센더 피씨에서 전송할 파일의 경로를 지정해준다 File file = new File("C:/img/high.gif"); // 리시버에게 전달할 파일의 이름과 크기를 각각의 변수에 저장한다 String fileName = file.getName(); long size = file.length(); // 파일의 데이터를 읽어오기 위해 파일인풋스트림을 생성하고, // 빠른 속도로 읽기 위해 버퍼인풋스트림을 파일인풋스트림에 연결하여 생성한다. FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); // 출력 스트림을 소켓을 통해 생성한다. OutputStream os = socket.getOutputStream(); // 빠른 속도를 위해 버퍼링을 지원하는 버퍼 출력 스트림을 생성하고, 소켓 출력 스트림에 연결한다. BufferedOutputStream bos = new BufferedOutputStream(os); // String 타입 파일의 이름과 byte 배열 파일 데이터를 송신하기 위해 오브젝트 출력 스트림을 생성한다. ObjectOutputStream oos = new ObjectOutputStream(bos); // 아웃풋스트림을 통해 파일 이름을 리시버에게 보낸다 oos.writeUTF(fileName); // 한번에 리시버에게 파일을 전송하기 위해 파일의 크기 만큼 배열을 선언하고, byte[] arr = new byte[(int) size]; // 그 배열에 파일의 데이터를 버퍼드인풋스트림으로 읽어와 저장한다 int data = bis.read(arr); System.out.println("한번에 읽은 크기 : " + data); // 오브젝트아웃스트림으로 한번에 리시버에게 파일의 데이터가 저장된 배열을 보내버린다 oos.write(arr); System.out.println("전송 완료 : 크기 (" + size/1024+ ")KB"); // 스트림 및 소켓 자원 반납 oos.close(); bis.close(); socket.close(); } }
public class Code_Receiver { // 파일 전송 및 저장 과정에서 예외가 발생할 경우 예외를 main 메소드로 전가한다 public static void main(String[] args) throws Exception { // 서버 소켓을 생성하고 클라이언트가가 요청을 보낼 포트를 개방한다 ServerSocket server = new ServerSocket(5500); // 요청이 들어가 전까지 accept() 메소드에 멈춰있다가, 요청에 대한 작업이 끝나면 // 다시 반복하게 된다 while (true) { System.out.println("클라이언트 접속 요청 대기 중.."); // accept 메소드는 클라이언트 요청이 들어오면 소켓 객체로 반환한다 Socket socket = server.accept(); // 소켓으로부터 입력 스트림을 생성한다. InputStream is = socket.getInputStream(); // 빠른 속도를 위해 버퍼 입력 스트림을 생성하고, 소켓 입력 스트림에 연결한다. BufferedInputStream bis = new BufferedInputStream(is); // Sender에서 보내온 파일 이름을 읽고, 파일의 데이터를 바이트 배열로 읽어오기 위해 오브젝트 입력 스트림을 생성한다. ObjectInputStream ois = new ObjectInputStream(bis); // 오브젝트 인풋스트림이 읽어온 파일의 이름을 저장한다 String fileName = ois.readUTF(); // Sender에서 보내온 파일 데이터를 읽어와 Receiver PC에 저장하기 위해 지정된 경로로 파일 출력 스트림을 생성한다. FileOutputStream fos = new FileOutputStream("C:/img/network/" + fileName); // 빠른 속도를 위해 버퍼아웃풋스트림을 생성하고, 파일아웃풋스트림에 연결한다. BufferedOutputStream bos = new BufferedOutputStream(fos); int data; System.out.println("파일 저장 시작"); // 버퍼드아웃풋스트림이 읽어온 데이터가 임시로 data 에 저장되고 // 더이상 읽어올 데이터가 없으면 -1 반환하고 반복문이 끝나게 된다 while ((data = ois.read()) != -1) { // Receiver pc 에 지정했던 파일 경로에 바이트 데이터들을 저장한다 bos.write(data); } System.out.println("파일 저장 완료"); // 스트림 및 소켓의 자원을 반환한다 ois.close(); bos.flush(); bos.close(); socket.close(); } } }
소켓 통신 과정
https://recipes4dev.tistory.com/153
채팅 서버 구현
상대방도 말하고 들을 준비가 되어있어야하고, 서버도 마찬가지다
듣는 쓰레드, 말하는 쓰레드 최소 필요하다
브라우저(클라이언트) <-> 서버(백엔드)
■ 서버는 다대일인데 동시다발적으로 처리하려면 쓰레드 풀을 이용하는것이 합리적이다
■ 직접 한번 만들어보자\
강사님이 애기한거
강의 들어도 별로 안좋음
컬렉션 프레임워크까지 복습하자
1.자바 상
2.데이터베이스 상
3.프런트(html, css, js, j-query) 중하
3-1. js, jquery 중
4.JSP 중
5.Spring 상
6.1차 프로젝트
7.AWS, DOCKER (중요도 낮음) 하루만 할꺼임 하
8.Spring boot 중
9. 2차 프로젝트(멘토링)
1.2.3.7 객관식 사지선다 끝나고 물어본정리내용
나머지 1차,2차 프로젝트 내용으로 채점이 들어감...
60점만 넘자
'프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글
복습 2일차 - 기본, 참조 자료형 (0) 2024.02.15 복습 1일차-(클래스) (0) 2024.02.14 11,12일차 - Thread (0) 2024.02.06 4일차 - 배열 (0) 2024.02.05 3일차 - 조건문, 반복 (0) 2024.02.05