ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 스트림
    공부 2022. 7. 26. 17:21
    728x90

    소켓: TCP/IP 네트워크(OSI 7계층 중 1~4 계층)를 자동으로 이용하기 쉽게 처리해주는 기술

    TCP(서버, 클라이언트), UDP(서버, 클라이언트)

     

    ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용

    포트를 열어 9999번 포트 LISTENING 상태로 바뀜

     

    Socket clientSocket=new Socket("IP주소",9999);
     
    서버와 연결되도록 주소와 포트번호 지정
     
     

    서버

    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server01 {
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용
            Socket clientSocket = serverSocket.accept();
           
            InputStream is =clientSocket.getInputStream(); //상대방으로부터 읽을 수 있는 스트림
            DataInputStream dis = new DataInputStream(is);
            int data=dis.readInt();
            System.out.println(data);

            clientSocket.close();
           
           
            //clientSocket.getOutputStream(); //상대방으로부터 보낼 수 있는 스트림
        }
    }

    클라이언트

    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;

    public class Client01 {
        public static void main(String[] args) throws IOException{
            Socket clientSocket=new Socket("ip주소",9999);
            OutputStream os = clientSocket.getOutputStream();
            DataOutputStream dos=new DataOutputStream(os);

            dos.writeInt(100);
            clientSocket.close();
        }  
    }

     

    서버에서 대기 -> 클라이언트에서 생성 3hand shaking

    -> 데이터 전송 -> 종료

     

     System.out.println("client IP addr: "+clientSocket.getInetAddress());
     System.out.println("server IP addr: "+clientSocket.getLocalAddress());
     System.out.println("client Port: "+clientSocket.getPort());
     System.out.println("server Port: "+clientSocket.getLocalPort());
     
    IP주소, Port 번호 출력
     
     
    블랙리스트일 경우 출력x

    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server02 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new FileReader("블랙리스트파일 주소"));
            ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용
            Socket clientSocket = serverSocket.accept();
            while(true){
                String line=br.readLine();
                if(line==null){
                    break;
                }
                if(line.equals(clientSocket.getInetAddress().toString())){
                    System.out.println("403 forbidden");
                    clientSocket.close();
                    return;    
                }
            }
            InputStream is =clientSocket.getInputStream(); //상대방으로부터 읽을 수 있는 스트림
            DataInputStream dis = new DataInputStream(is);
            int data=dis.readInt();
            System.out.println(data);
            clientSocket.close();

            //clientSocket.getOutputStream(); //상대방으로부터 보낼 수 있는 스트림
        }
    }

    메모장에서 블랙리스트를 불러들어와 블랙리스트일 경우 연결 종료

     

     

    Http 통신 요청해서 응답받기

    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;

    public class Client02 {
        public static void main(String[] args) throws IOException{
            Socket clientSocket=new Socket("www.ddarahakit.kro.kr",80);
            OutputStream os = clientSocket.getOutputStream();
            DataOutputStream dos=new DataOutputStream(os);
            dos.writeBytes("GET / HTTP/1.1\r\nHost: www.ddarahakit.kro.kr\r\n\r\n");
           
            InputStream is=clientSocket.getInputStream();
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            PrintWriter pw = new PrintWriter("저장할 파일 주소");
            while(true){
                String data=br.readLine();
                if(data==null){
                    break;
                }
                System.out.println(data);
                pw.println(data);
            }
            br.close();
            pw.close();
            clientSocket.close();
        }  
    }

     

     

     

     

     

     

     

     

    728x90
    반응형

    '공부' 카테고리의 다른 글

    디자인 패턴 - 싱글톤  (0) 2022.07.27
    자바 쓰레드  (0) 2022.07.27
    자바 스트림  (0) 2022.07.26
    자바 예외 처리  (0) 2022.07.26
    7계층 HTTP 프로토콜  (0) 2022.07.26

    댓글

Designed by Tistory.