Socket
- 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단 의미
- application layer 와 transportlayer사이의 인터페이스 역할 담당
- 서로 다른 endpoint간 통신을 위해 사용
Socket의 동작 과정
서버측 동작 과정
1. 서버는 Socket 만듬
2. 서버에서 ip주소와 port를 지정하여 소켓에 바인딩함
3. 서버는 listen상태가 되어 클라이언트의 요청을 기다린다
4. 클라이언트의 요청을 받아드리고 데이터 송수신을 위한 소켓 생성
5. 클라이언트와 데이터를 송/수신
6. 연결 종료
클라이언트측 동작 과정
1. Socket 만든다
2. 서버에게 요청을 보내 connection 맺는다
3. 서버와 데이터를 송/수신한다
4. 연결 종료
Java 프로그램 구현
- 클라이언트의 포트를 통해 서버에 연결 요청하면 서버에서 요청을 수락
→ 서버는 요청 수락한 후 새로운 소켓을 만들어 클라이언트와 연결 생성
→ 이후 클라이언트와 소켓 연결되어 데이터 주고 받는다. - 데이터 송수신시 별도 스레드 구현
- 데이터 송수신은 blocking방식으로 동작하기 때문에 메인스레드로만 구성하면 데이터 올바르게 수신할 수 없다
- Socket_변수명.getOutputStream() 이용해서 데이터 전송
- Socket_변수명.getInputStream() 이용해서 데이터 수신
Socket Class
생성자
Public Socket(InetAddress address, int port)
- IP 주소를 나타내는 InetAddress 객체와 포트 번호로 Socket 객체 생성
호스트명(IP 주소), 포트번호로 Socket 객체 생성
Public Socket(String host, int port)
- 호스트명(IP주소), 포트번호로 소켓 객체 생성
Client 쪽에서 Socket 생성자를 생성
자신이 접속하고 싶은 서버쪽의 호스트명(IP주소), 서버의 포트번호 접속
Socket 을 생성하면 연결은 자동으로 이루어지며
연결시 오류 발생하면 IOException 발생
ServerSocket Class
생성자
ServerSocket(int port)
- 지정한 포트에 ServerSocket 생성
ServerSocket은 요청이 네트워크를 통해 들어올 때 까지 기다리고
클라이언트 요청에 따라 작업을 한 후 결과 반환
ServerSocket 객체를 생성하여 클라이언트가 연결해 오기를 기다림
클라이언트 연결해 올 때마다 요청은 요청큐(Request Queue)에 쌓임
각각의 클라이언트 연결에 accept함으로써 요청을 요청큐에서 꺼내고
Socket 객체가 리턴됨
리턴되는 Socket 을 활용하여 클라이언트와 데이터를 주고 받으며
멀티쓰레드에서 Socket을 생성한 쓰레드에 주어서 클라이언트상대함
서버
1. 클라이언트 소켓 생성 및 서버 접속
2. 네트워크 입출력 스크림 생성
3. 서버로 데이터 전송(클라이언트 → 서버)
4. 서버로 부터 데이터 수신(서버 → 클라이언트)
5. 접속 종료
클라이언트
1. 서버 소켓 생성
2. 연결 대기
3. 네트워크 입출력 스트림 생성
4. 클라이언트부터 데이터 수신(서버 ← 클라이언트)
5. 클라이언트로 데이터 전송(서버 → 클라이언트)
6. 접속 종료
'JAVA > NetWork' 카테고리의 다른 글
MultiChat (0) | 2024.02.17 |
---|---|
Chat(1:1 채팅프로그램) (0) | 2024.02.16 |
TcpSocket (0) | 2024.02.15 |
URL클래스 (0) | 2024.02.14 |
URLConnection (0) | 2024.02.14 |