이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함
일주일 절반 왔다🎶
InputStream 사용하여 데이터 읽는 순서
- 스트림 준비 - 주(socket 에서 뽑아올 예정)+보조
- 읽어오기
- 읽어온 데이터 처리(출력, 기타 등등)
- 자원 반납 close
OutputStream 사용하여 데이터 쓰는 순서
- 스트림 준비 - 주(socket 에서 뽑아올 예정)+보조
- 쓰기(파일? 콘솔?)
- 자원반납 flush+close
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 에 담음
오류 발생 시 server 닫음
Socket 클래스에 ip 주소와 연결할 포트 넘버를 넣어 변수 socket 으로 객체화
socket 에 getOutputStream 메서드를 이용해서 스트림을 가져와 변수 os 에 담아줌
Bufferde, Object 보조 스트림 사용, 변수 oos 에 담음
oos 에 writeUTF 메서드를 사용해서 문자를 내보낼 수 있게 함
oos 를 flush 해줌
서버에서 보낸 내용을 받아서 출력하기 위해 socket 에 getInputStream 메서드를 사용해서 변수 is 에 담아줌
Buffered, Object 보조 스트림 사용해서 ois 변수에 담음
ois 에 readUTF 메서드를 사용해서 문자를 읽어와 msg 변수에 담음
msg 콘솔에 출력
ois 와 oos 닫기
try 와 catch 에서 모두 쓰기 위해 ServerSocket 타입 server 변수를 먼저 준비해 준다.
ServerSocket 클래스에 포트 7777 을 넣어 server 로 객체화 해준다.
서버를 계속 돌리기 위해 while(true) 문 사용
처음에는 접속 요청을 대기한다고 콘솔에 출력
server 에 accept 메서드를 사용해서 접속해 들어오는 것을 수락해서 socket 변수에 담는다.
Thread 사용을 위해 객체화 해옴
run 메서드로 실행문 안의 코드 수행
try 에 실행할 것들 넣고 catch 에 문제 발생 시 이유 출력하게 함.
socket에 getInputStream 을 받아온 것을 Buffered 보조 스트림에 bis 로 담고 Object 보조 스트림을 써서 ois 에 담음
ois 를 문자열로 읽어와서 FileName 변수에 담음.
File 을 내보내는 스트림 준비, 내보낼 장소를 C:/Users/PC/Downloads/ 의 fileName 으로 지정, fos 에 담음
Buffered 보조스트림 사용 bos 에 담음
while 문을 이용해서 ois로 받아온 데이터를 읽어 data 변수에 담음, -1이 아닐 때까지
bos 를 이용해서 data 를 써줌
사용한 자원 반납 bos 를 flush 해주고 bis 와 bos, socket 을 닫아줌
파일과 파일 네임이 모두 필요할 때는 Object 보조스트림을 사용해야 하는데 파일을 가져오거나 내보낼 때는 굳이 필요하지 않다.
Scanner(System.in) 이란!
자바에서 화면에서 키보드로 키를 입력받는 방법.
키보드에서 사용자로부터 키 입력을 받기 위해서는 system.in 을 사용한다.