공부

네트워크 스트림

빈v 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
반응형