[OS] 클라이언트 서버 환경에서 통신/소켓 통신 예제

bin1225·2024년 8월 13일
0

OS

목록 보기
3/10
post-thumbnail

소켓

소켓은 통신의 극점을 뜻한다. 각 소켓은 IP주소Port번호를 접합해서 구별한다.

클라이언트-서버

  • 서버는 지정 포트에 클라이언트 메시지 요청을 기다린다.
  • 요청이 들어오면 해당 요청을 수락함으로써 연결이 완성된다.

예제

java는 소켓에 대한 사용하기 쉬운 인터페이스를 제공한다.

서버

서버는 ServerSocket을 만들어 client의 요청을 기다린다.
요청이 들어오면 sock.accept()를 호출하여 client와 연결한다.
연결된 socket을 이용하여 데이터를 주고 받는다.

import java.net.*;
import java.io.*;

public class DateServer {
    public static void main(String[] args){
        System.out.println("Listening...");

        try{
            ServerSocket sock = new ServerSocket(7048);

            while(true){
                Socket client = sock.accept();
                System.out.println("Connected!");
                PrintWriter pout = new PrintWriter(client.getOutputStream(), true);

                pout.println(new java.util.Date().toString());
                client.close();
            }
        }
        catch (IOException ioe){
            System.err.println(ioe);
        }
    }
}

클라이언트

클라이언트는 IP주소와 Port번호를 이용해 ServerSocket을 얻어온다.
그리고 서버 소켓의 버퍼로부터 데이터를 받는다.

import java.net.*;
import java.io.*;

public class DateClient {
    public static void main(String[] args){
        try{
            Socket sock = new Socket("127.0.0.1",7048);

            InputStream in = sock.getInputStream();
            BufferedReader bin = new BufferedReader(new InputStreamReader(in));

            String line;
            while( (line=bin.readLine() )!=null){
                System.out.println(line);
            }

            sock.close();
        }
        catch (IOException ioe){
            System.err.println(ioe);
        }
    }
}

127.0.0.1

강의에서 127.0.0.1을 자신의 ip주소로 바꿔보란 얘기를 들어서
cmd 창에서 ipconfig 명령어로 알아낸 내 주소를 대신 입력하고 코드를 작동시켰는데, 소켓 연결이 정상적으로 이뤄지지 않았다.

https://cbn1218.tistory.com/37

이 블로그를 참고하며 알게 됐는데.. 127.0.0.1이 localhost와 매칭되는 ip주소였다.

localhost자체는 도메인 이름이고 실제 자신을 가리킬 수 있는 ip 주소는 127.0.0.1이다.

그럼 왜 네트워크상에서 부여받은 나의 IP주소값으로는 위의 예제가 작동하지 않을까요?

0개의 댓글