2 분 소요

네트워크



관련 용어 정리

네트워크(Network) : 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용형태

인터넷(Internet) : 컴퓨터로 연결하여 TCP/IP 프로토콜을 이용하여 정보를 주고 받는 네트워크

IP(internet protocol) : 인터넷의 연결되어있는 모든 장치를 식별할 수 있도록 장비에게 부여되는 고유주소

포트(Port) : 컴퓨터나 통신장비에서 다른 장치에 물리적으로 접속되는 특정한 통로

소켓(socket) : 두 호스트 사이 연결, 어떠한 방식으로 통신을 할지 정해주는 것

버퍼(buffer) : 입출력을 수행하는데 있어 속도차이를 극복하기 위해 사용하는 임시 저장 공간. 프로그래밍이나 웅영체제에서 CPU와 보조기억장치 사이에서 사용되는 임시 저장 공간을 뜻함.



소켓통신 방법

    client         접속          server
 서버 ip, port     ----->       서버 소켓
  1. client(소켓)이 ip 주소와 port 번호를 통해 server (소켓) 에 접근
  2. server(소켓)은 client 가 접속을 했는지 체크하는 용도로만 사용
  3. server(소켓) 을 통해 client 소켓을 생성
    서버 소켓 생성
    ServerSocket 참조변수 = new ServerSocket(포트번호);

    클라이언트 소켓 생성
    Socket 참조변수 = new Socket("아이피주소", 포트번호)

위 와 같은 방법으로 두 PC 간 통신이 가능하며 예제를 통해 더 자세히 알아보자.

// server
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server1 {
    public static void main(String[] args) {
        int port = 9999;
        try{
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("클라이언트를 기다리고 있습니다.");
            while(true){
                // 새로운 클라이언트가 접속시 클라이언트 소켓을 생성
                Socket socket = serverSocket.accept();
                System.out.println("클라이언트가 접속했습니다.");
                System.out.println("Client ip : " + socket.getInetAddress());
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
// client
import java.io.IOException;
import java.net.Socket;

public class Client1 {
    public static void main(String[] args) {
        try{
            Socket socket = new Socket("127.0.0.1", 9999);
            // 서버 포트번호와 일치하면 연결
            
            System.out.println("서버와 접속이 되었습니다.");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
실행결과
// server
클라이언트를 기다리고 있습니다.
클라이언트가 접속했습니다.
Client ip : /127.0.0.1
실행결과
// client
서버와 접속이 되었습니다.

서버를 먼저 실행하고 클라이언트 실행해야됨.



메세지 보내기

클라이언트에서 서버로 메세지 보내는 방법을 알아보자.

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
    public static void main(String[] args) {
        try{
            ServerSocket serverSocket= new ServerSocket(9999); 
            System.out.println("서버 소켓 생성됨");
            Socket socket = serverSocket.accept(); 
            System.out.println("클라이언트가 접속 했습니다.");
            System.out.println("Client ip : " + socket.getInetAddress());

            // client로 부터 전송받은 데이터을 저장
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            while(true){
                String data = br.readLine();  // client로 전송받은 데이터를 읽어 data에 저장
                if(data.equals("Q") || data.equals("q")){ // 전송받은 데이터 중 Q,q 가 있을 시 프로그램 종료
                    System.out.println("프로그램 종료");
                    break;
                }
                System.out.println("Client 메시지 : " + data); // 클라이언트가 보낸 데이터 출력
            }

            br.close();
            socket.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

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

public class Client2 {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1" , 9999);

			// 서버로 보내는 역할
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); 
			// 키보드로 읽어들임
            BufferedReader key = new BufferedReader(new InputStreamReader(System.in)); 
            
            while(true){
                System.out.print("메시지 입력 : ");
                String data = key.readLine(); // 키보드로 입력 받은 값을 읽어 data에 저장
                if(data.equals("Q")|| data.equals("q")){
                    System.out.println("채팅 종료");
                    break;
                }
                pw.println(data); // 서버로 data 값 보내기
                pw.flush(); // 항상 Writer 는 flush()로 버퍼 내 데이터 비우기
            }
            pw.close();
            socket.close();
            key.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

실행결과 // server
서버 소켓 생성됨
클라이언트가 접속 했습니다.
Client ip : /127.0.0.1
Client 메시지 : 안녕하세요
Client 메시지 : 반갑습니다.
실행결과 // client
메시지 입력 : 안녕하세요
메시지 입력 : 반갑습니다.
메시지 입력 : q
채팅 종료

태그:

카테고리:

업데이트: