본문 바로가기
Java

소켓을 통한 서버 간 통신

by zenna 2022. 7. 26.
728x90
1. 소켓을 사용하여 두 서버 간 통신하고, ip 주소 등을 받아옴
2. 블랙리스트.txt파일의 ip와 연결된 경우 연결을 끊어버리기
확인할 점
1. 포트를 여는 서버의 실행 파일 : Server01.java
2. 연결을 요청하는 클라이언트 파일 : Client01.java

* 두 파일 모두  java.io.* 와 java.net.* 를 import함
public class Server01 {
    public static void main(String[] args) throws IOException {
        //서버가 사용할 포트번호를 열어줘야 하는데 이걸 ServerSocket이 해줌
        //1.
        ServerSocket serverSocket = new ServerSocket(8888);
        //9999포트를 쓰겠다고 선언
        
        //2
        //클라이언트가 연결요청(3악수) 보냈을 때 응답을 주는 코드

        Socket clientSocket = serverSocket.accept();
        System.out.println("client IP addr : "+clientSocket.getLocalAddress());
        System.out.println("server IP addr : "+clientSocket.getInetAddress());
        System.out.println("client Port : "+clientSocket.getPort());
        System.out.println("server Port : "+clientSocket.getLocalPort());

        //거부할 사용자를 확인하기 위하여 파일을 불러들이고, ArrayList에 집어넣음
        ArrayList<String> blackLists = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("c:\\Java\\aaBitJava\\blacklist.txt"));
        while(true){
            String line = br.readLine();
            if (line==null){ 
                break;
            }else{
                blackLists.add(line);
            }

        }
        String address = clientSocket.getInetAddress()+"";
        for (String i: blackLists) {
            System.out.println(i);
            if(address.equals(i)){
                System.out.println("거부한 사용자가 접속했다");
                clientSocket.close();
                System.exit(0);
            }else{System.out.println("가능한 사용자");}
        }

        // clientSocket.getInputAddress(); //상대가 보낸 걸 읽을 스트림
        // clientSocket.getOutputStream(); //상대에게 보낼 수 있는 스트림

        //4
        InputStream is = clientSocket.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        //5
        int data = dis.readInt();
        System.out.println(data);
        
        clientSocket.close();
        //터미널에 netstat -ano 하면 9999로 통신중임을 확인 가능

        //현재 ..응답을 기다리고만 있는거래.. 클라이언트가 뭘 보내도 받을 수가 없대.
        //그래서 client01.java수정
    }
}
public class Client01 {
    public static void main(String[] args) throws Exception{
        //3
        //클라이언트에서 소켓 생성 : 얘가 실행이 되어야 서버가 값을 clientSocket에 넣어 반환할 수 있음
        Socket clientSocket = new Socket("192.168.1.20",8888);

        //4
        //클라이언트가 데이터를 전달하도록 해볼것
        OutputStream os=clientSocket.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);

        //6
        //숫자 하나를 전달해보자
        dos.writeInt(100);

        clientSocket.close();
        
    }
}

구조도

728x90

댓글