Skip to Content
Suffering builds character
아카이브13.프로세스,스레드특징소켓, 스레드1.소켓

1.소켓

소켓(Socket)이란 네트워크 통신을 위한 인터페이스

인터넷 프로토콜(Internet Protocol)을 사용해 프로세스 간 통신을 위한 표현,
Unix의 변형인 버클리 소프트웨어 배포판BSD(Berkeley Software Distribution)에서 등장하게 됨

소켓은 네트워크 통신이 가능한 프로그램을 구현하기 위한 일관된 방법을 제공하는 프로그래밍 모델로, 개발자는 네트워크 통신 자체에 잘 알지 못해도 빠르게 네트워크 애플리케이션을 개발할 수 있게 됨

IP 주소와 포트 번호 및 자바 네트워크와 같은 몇 가지 개념에 대해서만 알고 있어도 간단하게 네트워크 애플리케이션을 작성할 수 있음

1. 소켓을 통한 클라이언트 - 서버 네트워크 통신 방식

하드웨어의 메모리는 크게 2가지로 영역이 구분되어 사용됨

  1. 애플리케이션의 프로세스의 동작에 필요한 메모리가 위치한 사용자 공간(User space)
  2. 운영체제가 자체적으로 사용하는 커널 공간(Kernel space)

네트워크 프로그램을 개발할 경우, 애플리케이션은 하나의 프로세스로 실행되어 사용자 공간의 메모리를 차지하게 되고,
애플리케이션에서 생성한 소켓 객체는 커널 공간에 생성된 소켓과 매칭되어 클라이언트와 데이터를 송수신할 수 있게 됨

2. Java로 추상화된 소켓 API, Socket 객체의 구조

소켓 기반의 네트워크 통신에 필요한 정보는 다음과 같음

  • 서버로 요청을 보내는 클라이언트 자신의 IP 주소 및 포트 번호
  • 서버의 IP 주소 및 포트 번호
  • 요청을 보낼 데이터를 담는 송신 버퍼
  • 요청 받은 데이터를 담는 수신 버퍼

데이터를 보낼 때는 송신 버퍼에 데이터가 써지고
데이터를 받을 때는 수신 버퍼에 데이터가 써짐

자바에서는 java.net 패키지에서 제공하는 Socket.java / SocketImpl.java를 통해 위의 정보들을 사용할 수 있음

SocketImpl.java
public abstract class SocketImpl implements SocketOptions { protected FileDescriptor fd; /* The IP address of the remote end of this socket. */ protected InetAddress address; /* The port number on the remote host to which this socket is connected. */ protected int port; /* The local port number to which this socket is connected. */ protected int localport; // ... }
Socket.java
public class Socket implements java.io.Closeable { // ... public synchronized void setSendBufferSize(int size) throws SocketException{ if (!(size > 0)) { throw new IllegalArgumentException("negative send size"); } if (isClosed()) throw new SocketException("Socket is closed"); getImpl().setOption(SocketOptions.SO_SNDBUF, size); } public synchronized int getSendBufferSize() throws SocketException { if (isClosed()) throw new SocketException("Socket is closed"); int result = 0; Object o = getImpl().getOption(SocketOptions.SO_SNDBUF); if (o instanceof Integer) { result = ((Integer)o).intValue(); } return result; } // ... }
Last updated on