Wanna be Brilliant Full-Stack Developer
Java 소켓통신 #2 본문
바이트 스트림이 연결이 되려면 서버 소켓이 먼저 실행이 되어야한다!
메인이 양쪽에 다 있다. 1번으로 서버소켓의 메인이 실행이 되어지고 실행이 되면 클라이언트 소켓쪽에서
두번째로 하는것이 IP주소를 통해서 연결을 하는것이다.
연결을 하면 둘이서 연결이 되어지고 양 끝 단에 버퍼를 달고 버퍼에서 메시지를 안녕이라고 보낼 수있다.
이거를 실습을 한번 해보자!
이렇게 전역변수로 선언을 하고 아직 메모리에 뜨지는 않았다.
그리고 생성자를 하나를 만든다.
근데 왜 소켓이 두개가 있는가?
소켓 통신은 이 포트를 양 끝단에 달고 하는것인데 왜 소켓이 두개가 있는가하면?!
소켓 자체가 포트 통신이다. 왜 두개가 있는가하면!?
다시한번 우리가 그려보자!
서버 소켓이 있다. 애 포트를 내가 10000번이라고 했다. 이것이 실행이되면 클라이언트 소켓이
최초에는 서버소켓한테 연결을 시도한다.
연결을 시도할때 IP주소 + 포트번호 10000으로 시도를 하는데 서버소켓이 맨처음에는 실행이 되어있어야하고
2번째로는 클라이언트소켓을 실행을 하고
세번째로는 연결을 시도한다!
연결을 시도를 하면 서버소켓이 연결이 되면 그냥 소켓을 하나 새롭게 만든다.
왜냐하면 서버소켓의 역할이 연결만 하는것이기 떄문이다.
그래서 통신을 못한다. 새로운 소켓을 하나 만들어서 실제로는 클라이언트소켓과 새로운 소켓이 연결이 된다.
새로운소켓에대한 포트 번호는 1024번부터 65535까지 중 사용하지 않는 포트 번호를
랜덤으로 선정한다. 랜덤으로 선정하는것이 좋다. 왜냐하면 몇번을 쓰고 있는지 내가
잘모르기 떄문에 소켓이 정해주는게 좋기 떄문이다.
그래서 네번째는 새로운 소켓이 생성이되어지고 포트번호는 랜덤으로 된다. 몇번인지는 중요하지 않다.
여기서 그러면 5번이 무엇이 되는가? 바이트 스트림이 연결이 되는것이다.
그러면 실제로 연결을 누구랑 누가하는가? 새로운 소켓과 클라이언트 소켓이 하는것이다.
그러면 서버 소켓은 클라이언트 연결을 받는 소켓이고
밑에 있는 소켓은 실제 통신을 하는 소켓인것이다.
이제 내가 생성자 안에다가 try , catch를 하는데 통신을 하면 무조건적으로 예외가 발생할 수 있기 때문이다.
try에서는 첫번째는 서버소켓을 만들어야한다!
애를 만들고나서 번호를 만번이라고 하기로 했다.
실행을 하면 방화벽 10000번을 여시겠습니까? 이렇게 물어본다. 이런메시지가 왜뜨는가하면?
어떤 컴퓨터가 있으면!? 컴퓨터가 통신을 할때에 외부에 엄청나게 많은것들과 통신을 하는데
컴퓨터는 대부분다 내부에 윈도우나, 리눅스와 같은 OS를 설치를 하는데 OS가 방화벽의 역할을 하기도 한다.
OS가 모든 포트를 차단해버리는 방화벽을 가지고 있다. 포트가 많이 열려있으면 외부에 노출된 가능성이 크기때문에
잘못된 악성코드나, 해커가 들어올 수 있기 때문이다.
근데 지금 컴퓨터가 10000번을 열어야되기떄문에 이걸 열어도되는지 나에게 물어보고 있는것이다.
소켓 서버가 이제 생성이 완료가 되었다. 대기해야한다.
클라이언트 접속 대기중...? accept라는 메서드가 언제 발생하는가하면? 클라이언트가 연결을 하면
이렇게 실행이 된다.
근데 실행을 하면 연결이 안되고 멈춰있다. 왜냐하면 대기중인 상태이기 떄문이다.
accept는 언제까지 멈추는가? 10000번으로 대기하고 있을때 연결이 시도될때 소켓이 만들어지고
즉 그 말은 accept라는 함수로 실행이 될때 대기하고 있다. 언제까지? 연결이 시도 될때 까지!
System.in이라고 넣으면 애가 누구랑 연결이 되는 버퍼냐면 inputStreamReader 문자로 바꾸는 것이다.
우리는 누구랑 연결하는가? 키보드가 아니라 Socket.getInputStream로 버퍼를 달아야한다.
이 메서드가 무엇인가?
새로운 소켓과 크라이언트 소켓이 연결되는 바이트 스트림이 Socket.getInputStream이다.
여기 선에 무엇을 다는가? 양끝단에 버퍼를 다는것이다. 저
어떤 버퍼인가? 새로운 소켓에는 Input 외부로부터 들어오는 버퍼를 달았다.
br.ReadLine하면 내가 보낸거를 볼수가 있는데
'Some Memos > Java' 카테고리의 다른 글
JAVA 소켓통신 실습(스레드) (1) | 2023.04.25 |
---|---|
JAVA 소켓 통신 #3 클라이언트 소켓 (0) | 2023.04.25 |
JAVA 소켓통신의 개념 #1 (0) | 2023.04.13 |
Java BufferedReader란? (0) | 2023.04.13 |
자바 버퍼(Stream)이란? (0) | 2023.04.06 |