티스토리 뷰
Socket이란?
socket은 영어사전에서는 콘센트, 플러그를 꽂는 곳 이라고 정의됩니다. 당연히 인터넷에서 말하는 소켓과는 용도가 다르지만 완전히 별개의 이야기는 아닙니다. 국가별로 콘센트마다 규격이 다르듯이 인터넷도 소켓을 사용하려면 정해진 규격을 사용해야 합니다. 여기서 설명하려고 하는 소켓은 엄밀히 말하면 TCP/IP소켓입니다. 소켓은 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미합니다. 콘센트와 전자제품과 비슷하다고 할 수 있습니다. 콘센트에 플러그를 연결함으로써 전기를 공급 받을 수 있으니까요.
클라이언트와 서버 소켓
서버 소켓은 클라이언트 소켓이 접속하기를 기다리고 있는 서버에서 구현된 소켓입니다. 전자제품과 콘센트가 있다면 콘센트의 위치라고 할 수 있습니다.
클라이언트 관점에서는 서버의 IP와 포트를 알아야 접속 할 수 있습니다.
서버의 관점에서는 서버소켓을 만들어 클라이언트를 기다립니다. ServerSocket으로 생성된 소켓에 accept 메소드를 사용하면 클라이언트 소켓이 접속 할 수 있는 상태가 됩니다.
클라이언트 소켓이 접속하면 서버소켓은 새로 생성한 소켓으로 클라이언트 소켓과 통신을 합니다.
HTTP 통신과 차이점
HTTP
- 비연결성으로 클라이언트가 서버에게 통신을 요청하면 서버는 응답을 하고 연결은 끊어집니다.
- 새로운 데이터를 요청 할 때 마다 연결을 맺고 끊고를 반복해야 함으로 자주 데이터를 주고받으면 오버헤드가 발생합니다.
Socket
- 소켓은 서버와 클라이언트가 실시간으로 데이터를 주고받는 양방향 통신(Full Duplex) 입니다.
- 실시간으로 데이터갱신이 필요한 일(채팅, 영상 스트리밍, 주식)등에 이용됩니다.
소스
Server
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(80);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg = br.readLine();
System.out.println(msg);
br.close();
is.close();
socket.close();
serverSocket.close();
}
}
Client
import java.io.*;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 80);
OutputStream os = socket.getOutputStream();
PrintWriter writer = new PrintWriter(os);
writer.println("안녕하세요!");
writer.close();
os.close();
socket.close();
}
}
'프로그래밍 언어 > Java Programming' 카테고리의 다른 글
Java PipedInputOutputStream 클래스 (0) | 2016.10.22 |
---|---|
JAVA ByteArrayInputStream 클래스 (0) | 2016.10.22 |
URLConnection 으로 웹서버에 데이터 보내보기 (0) | 2016.10.22 |
JAVA 왜 버퍼(buffer)를 사용해야 하나요? (0) | 2016.10.10 |
JAVA(자바) IO(input output) stream (0) | 2016.09.21 |
댓글