ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

    소켓 프로그래밍. (Socket Programming)

    1. 소켓(Socket) 만약 네트워크와 관련된 프로젝트를 진행하면서, 사용자(User)의 관점이 아닌, 개발자(Developer)의 관점에서 네트워크를 다뤄본 경험이 있다면, "소켓(Socket)"이라는 용어가 아주 낯설

    recipes4dev.tistory.com

    채팅 서버 구현

    상대방도 말하고 들을 준비가 되어있어야하고, 서버도 마찬가지다

    듣는 쓰레드, 말하는 쓰레드 최소 필요하다

    브라우저(클라이언트) <-> 서버(백엔드)

    ■ 서버는 다대일인데 동시다발적으로 처리하려면 쓰레드 풀을 이용하는것이 합리적이다

    ■ 직접 한번 만들어보자\

     

    강사님이 애기한거

    강의 들어도 별로 안좋음

    컬렉션 프레임워크까지 복습하자

     

    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
Designed by Tistory.