프로그램/Java

[java] ServerSocket, Socket

승미니1024 2018. 5. 21. 17:29

ServerSocket, Socket



ServerSocket은 java에서 서버 프로그램을 개발할 때 쓰이는 클래스이다. 해당 클래스를 이용해서 서버를 개발 하는 방법에 대해 알아보겠다. Socket 클래스는 client에서 서버로 접속하거나 Server에서 accept 하는데 필요한 클래스다. 이 설명을 이해 하려면 TCP/IP 접속 송수신 과정이해가 선행 되어야 한다.


 

소켓 송수신 과정 설명



ServerSocket, Socket 클래스를 이용한 서버-클라이언트 프로그램을 이해하려면 다음과 같이 TCP/IP 송수신 과정을 이해 해야한다.


 서버

 방향

 클라이언트

 클라이언트의 요청을 받기 위한 준비를 한다.(ServerSocket)

 

 

 클라이언트의 요청을 받아 들인다. (accept)

 <-

 서버에 접속 요청을 한다. (Socket)

 클라이언트가 보낸 데이터를 출력 한다. (BufferedReader)

 <-

 서버에 메시지를 보낸다. ( BufferedWriter )

 클라이언트에 메시지를 보낸다. ( BufferedWriter )

 ->

 서버가 보낸 메시지를 출력한다. ( BufferedReader )

 종료 한다. ( socket.close() )

 

 종료 한다. ( socket.close() )



[서버]

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class Server {

    public static void main(String[] args ) {

        try {

            //서버 생성

            ServerSocket serverSocket = new ServerSocket(9000);

            //client 접속 accept

            Socket socket = serverSocket.accept();

            

            //client가 보낸 데이터 출력

            BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream()));

            String message = bufReader.readLine();

            System.out.println("Message : " + message );

            

            //client에 데이터 전송

            BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));

            bufWriter.write("hello world");

            bufWriter.newLine();

            bufWriter.flush();

            

            socket.close();

            serverSocket.close();

            bufReader.close();

            bufWriter.close();

            

          }

          catch( Exception e ){

            e.printStackTrace();

          }

            

     }

}

  


9000번 port로 설정해 서버를 생성

 ServerSocket serverSocket = new ServerSocket(9000);


클라이언트 요청을 받아 들인다.

 Socket socket = serverSocket.accept();


[클라이언트]

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;


public class Client {

    public static void main(String[] args ) {

        try {

            //서버 접속

            Socket socket = new Socket("127.0.0.1", 9000);

            

            //Server에 보낼 데이터 

            BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));

            bufWriter.write("hello world");

            bufWriter.newLine();

            bufWriter.flush();

            

            //Server가 보낸 데이터 출력

            BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream()));

            String message = bufReader.readLine();

            System.out.println("Message : " + message );

            

            socket.close();

            bufReader.close();

            bufWriter.close();

          }

          catch( Exception e ){

            e.printStackTrace();

          }

            

          }

}



127.0.0.1 (localhost) 9000번 서버에 접속

 Socket socket = new Socket("127.0.0.1", 9000);



소켓에서 데이터를 읽을 때 

( 예제 기준으로 서버인 경우 클라이언트의 요청을 받는다. 반대로 클라이언트는 서버의 응답을 받는다. )

BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream())));


소켓에서 데이터를 쓸 때 

( 예제 기준으로 서버인 경우 클라이언트에 응답을 한다. 반대로 클라이언트는 서버의 요청을 한다. )

 BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())));




반응형