[IT국비지원] 개발자 교육 35일 차 : JAVA(2023.09.13)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 9월 12일
0

K-digital training

목록 보기
36/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함

일주일 절반 왔다🎶

Echo Server

  • Client 와 Server 가 접속했다면 Stream 을 통해 data 를 전송할 수 있다.
  • 받은 내용을 그대로 응답하는 Echo 서버 만들기.

InputStream 사용하여 데이터 읽는 순서

  1. 스트림 준비 - 주(socket 에서 뽑아올 예정)+보조
  2. 읽어오기
  3. 읽어온 데이터 처리(출력, 기타 등등)
  4. 자원 반납 close

OutputStream 사용하여 데이터 쓰는 순서

  1. 스트림 준비 - 주(socket 에서 뽑아올 예정)+보조
  2. 쓰기(파일? 콘솔?)
  3. 자원반납 flush+close

server


1. ServerSocket 형태의 server 변수 준비
2. ServerSocket 클래스를 객체화하며 포트를 5001 로 개방하고 변수 server 에 담음
3. while 문 안에 돌림 / server에서 승인된 것들 변수 socket 에 담음
4. 받아온 socket 에서 getRemoteSocketAddress 메서드를 이용하여 InetSocketAddress 타입 변수 addr 에 담음(어드레스 정보를 받아오기 위한 코드)
5. addr 의 어드레스와 포트를 출력
6. 받아온 socket 에서 InputStream 을 가져와 변수 is에 담음
7. 보조 스트림인 BufferedInputStream 을 이용해 is를 bis 로 탑승
8. bis 를 ObjecInputStream 에 탑승시켜 ois 에 담음
9. ois 를 readUTF 메서드로 읽어서 변수 msg 에 담음

  • readUTF는 상대가 입력하지 않으면 계속 대기한다(스캐너처럼)
  • 주의해야 할 것은 문자열을 쓰거나 읽을 때 readLine() 이 아닌 readUTF() 이다.
  • double 데이터를 읽으려면 readDouble(), char 데이터를 읽을 때는 readChar()를 이용한다. 문자열을 읽을 때는 readUTF()을 사용한다.
  1. 콘솔에 읽어온 메시지 출력하기 위해 socket 에 getOutputStream 을 이용하여 os 변수에 스트림을 받아온다.
  2. Buffered 보조 스트림 사용
  3. Object 보조 스트림 사용해서 oos 에 담음
  4. oos writeUTF 메서드를 사용해서 msg 값을 내보낸다.
  5. 사용한 oos 자원 flush / oos 반납 / ois 도 반납

오류 발생 시 server 닫음

client

  1. Socket 클래스에 ip 주소와 연결할 포트 넘버를 넣어 변수 socket 으로 객체화

  2. socket 에 getOutputStream 메서드를 이용해서 스트림을 가져와 변수 os 에 담아줌

  3. Bufferde, Object 보조 스트림 사용, 변수 oos 에 담음

  4. oos 에 writeUTF 메서드를 사용해서 문자를 내보낼 수 있게 함

  5. oos 를 flush 해줌

  6. 서버에서 보낸 내용을 받아서 출력하기 위해 socket 에 getInputStream 메서드를 사용해서 변수 is 에 담아줌

  7. Buffered, Object 보조 스트림 사용해서 ois 변수에 담음

  8. ois 에 readUTF 메서드를 사용해서 문자를 읽어와 msg 변수에 담음

  9. msg 콘솔에 출력

  10. ois 와 oos 닫기


TCP 프로토콜(소켓 통신)

  • 클라이언트 - 서버 양방향 통신 가능

HTTP 프로토콜(웹)

  • 클라이언트는 요청만 하고, 서버는 응답만 한다.


Network를 활용한 File 전송(with Thread)

  • 문자나 파일을 전송하는 절차는 모두 같다.
  • 다만 사용하는 Stream 에 차이가 있을 뿐이다.

client

  1. Socket 클래스에 ip 주소와 포트 넘버를 받아와서 변수 socket 에 담는다. (이것으로 접속 완료)
  2. File 클래스에 C:/img/lol.gif 라는 파일을 가져와 file 변수에 담음
  3. 변수 file 을 Buffered 보조스트림에 태워서 bis 변수에 담음
  • 여기까지 클라의 파일을 읽어올 스트림 준비
  1. socket에 getOutputStream메서드로 내보낼 스트림을 준비, 최종적으로 Object 보조 스트림으로 oos 에 태움
  • 여기까지 파일 보낼 스트림 준비한 것
  1. 파일을 읽어오기 위해 file 의 길이만큼 int 로 변환하여 byte 변수 arr 에 담음
  2. bis 인풋 스트림으로 arr을 읽어서 변수 size 에 담음
  3. 읽어온 파일의 사이즈를 콘솔에 출력
  4. oos outputStream 에 문자열을 쓰는 메서드를 사용해서 알아낸 file의 이름을 쓴다.
  5. oos 에 arr 배열을 쓴다.
  6. 사용한 oos를 flush 해주고 oos와 bis, socket 을 닫아줌다.

server

  1. try 와 catch 에서 모두 쓰기 위해 ServerSocket 타입 server 변수를 먼저 준비해 준다.

  2. ServerSocket 클래스에 포트 7777 을 넣어 server 로 객체화 해준다.

  3. 서버를 계속 돌리기 위해 while(true) 문 사용

  4. 처음에는 접속 요청을 대기한다고 콘솔에 출력

  5. server 에 accept 메서드를 사용해서 접속해 들어오는 것을 수락해서 socket 변수에 담는다.

  6. Thread 사용을 위해 객체화 해옴

  7. run 메서드로 실행문 안의 코드 수행

  8. try 에 실행할 것들 넣고 catch 에 문제 발생 시 이유 출력하게 함.

  9. socket에 getInputStream 을 받아온 것을 Buffered 보조 스트림에 bis 로 담고 Object 보조 스트림을 써서 ois 에 담음

  10. ois 를 문자열로 읽어와서 FileName 변수에 담음.

  11. File 을 내보내는 스트림 준비, 내보낼 장소를 C:/Users/PC/Downloads/ 의 fileName 으로 지정, fos 에 담음

  12. Buffered 보조스트림 사용 bos 에 담음

  13. while 문을 이용해서 ois로 받아온 데이터를 읽어 data 변수에 담음, -1이 아닐 때까지

  14. bos 를 이용해서 data 를 써줌

  15. 사용한 자원 반납 bos 를 flush 해주고 bis 와 bos, socket 을 닫아줌

파일과 파일 네임이 모두 필요할 때는 Object 보조스트림을 사용해야 하는데 파일을 가져오거나 내보낼 때는 굳이 필요하지 않다.



1:1 Chatting 구현

  • 양쪽 모두 수신과 발신이 자유롭게 되는 시스템 구현
  • 양쪽에서 send, receive 를 모두 하려면 이 일을 대행해 줄 친구들이 필요하다.

senderThread

  1. 필드 멤버 Socket 변수 선언
  2. 필드 멤버 ObjectOutStream 타입의 변수 oos 선언
  3. 샌드 스레드는 socket 을 매개변수로 실행됨
  4. 매개변수 socket 을 필드 socket 에 담아줌
  5. 스레드를 실행할 run 메서드 준비
  6. System.in 을 담아 Scanner 클래스 객체화

    Scanner(System.in) 이란!
    자바에서 화면에서 키보드로 키를 입력받는 방법.
    키보드에서 사용자로부터 키 입력을 받기 위해서는 system.in 을 사용한다.

  7. try 문에 실행할 내용을 써준다.
  8. ObjectOutputStream 클래스로 socket 에서 스트림을 받아와서 oos 변수에 담아준다.
  9. while 문을 이용해 계속 실행해준다.
  10. scan.nextLine() 을 이용해 입력한 문자열을 msg 변수에 담아준다.
  11. 내가 보낸 msg 를 콘솔에 출력한다.
  12. oos 스트림을 이용해 msg 문자열을 써준다.
  13. oos 를 flush 해준다.
  14. 대화 중 문제가 발생하면 접속 종료 및 자원 정리를 위해 oos, scan, socket 을 닫아준다.

recvThread

client

server

WebServer

업로드중..

profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보