모각코 8회차(11.11)

기먼지·2022년 11월 21일
0

모각코코볼

목록 보기
8/11

소켓(Socket)

  • 다양한 운영체제와 언어에서 지원되는 네트워크 프로그래밍 API
  • 저수준이므로 통신의 세부 사항을 개발자가 일일이 설계하고 구현해야 함

-소켓 통신 기초

  • 서버(Server) : 먼저 실행하여 기다리는 프로그램
  • 클라이언트(Client) : 통신을 하고자 서버에 접속하는 프로그램
  • 서버와 클라이언트는 서로 다른 IP 주소를 가지는 시스템에서 실행
  • 해당 시스템 내에서 고유한 포트 번호를 가짐

-TCP 서버의 기본 구조

ServerSocket servSock = null;
try {
   // 서버 소켓을 초기화한다.
   servSock = new ServerSocket(9000);
   while (true) {
      // 클라이언트의 접속을 기다린다.
      Socket sock = servSock.accept();
      InputStream inStream = sock.getInputStream();
      OutputStream outStream = sock.getOutputStream();
      // 클라이언트와 데이터를 주고 받는다.
      while (true) {
         // 데이터 수신
         inStream.read(...);
         // 데이터 송신
         outStream.write(...);
      }
      sock.close();
   }
}
catch (IOException e) {
   e.printStackTrace();
}
finally {
   servSock.close();
}

-소켓을 이용한 서버 작성 절차

  • ServerSocket 객체 생성
  • ServerSocket 객체에 대해 accept()를 호출하면 대기하다가 클라이언트가 접속하면 리턴
  • accept()가 리턴한 Socket 객체에 대해 getInputStream()과 getOutputStream()을 각각 호출하여 InputStrea과 OutputStream 객체 얻기
  • InputStream 객체에 대해 read()를 호출하면 클라이언트가 보낸 데이터를 읽을 수 있고, OutputStream 객체에 대해 write()를 호출하면 클라이언트에 데이터를 보낼 수 있음
  • 클라이언트와 데이터 통신이 끝나면 Socket 객체 닫기
  • 서버 작동을 끝내려면 ServerSocket 객체 닫기

-TCP 클라이언트의 기본 구조

Socket sock = null;
try {
   // 서버에 접속한다.
   sock = new Socket("127.0.0.1", 9000);
   InputStream inStream = sock.getInputStream();
   OutputStream outStream = sock.getOutputStream();
   // 서버와 데이터를 주고 받는다.   
   while (true) {
      // 데이터 송신
      outStream.write(...);
      // 데이터 수신
      inStream.read(...);
   }
}
catch (IOException e) {
   e.printStackTrace();
}
finally {
   sock.close();
}

-소켓을 이용한 클라이언트 작성 절차

  • Socket 객체를 생성하여 서버에 접속
  • Socket 객체에 대해 getInputStream()과 getOutputStream()을 각각 호출하여 InputStream과 OutputStream 객체 얻기
  • OutputStream 객체에 대해 write()를 호출하면 서버에 데이터를 보낼 수 있고, InputStream 객체에 대해 read()를 호출하면 서버가 보낸 데이터 혹은 클라이언트가 보낸 데이터의 결과를 읽기 가능
  • 서버와 데이터 통신이 끝나면 Socket 객체 닫기
profile
열심히 굴러가기 !

0개의 댓글