본문 바로가기
(혼) (공) (web)

미니 프로젝트 1

by 만석이 2024. 4. 18.

 

팀 : 3~4명

기간 : 4.25 ~ 5.8


발표 : 5.9

 

 

서로 다른 프로젝트의 클래스 두개가 있다.

 

A클래스에서 입력받은 문자열을 B클래스의 라벨에 입력시키려고한다.

 

 

 

서버

 // 서버 소켓 생성 및 대기
                    ServerSocket serverSocket = new ServerSocket(1233);
                    while (true) {
                        // 클라이언트 소켓 연결
                        Socket clientSocket = serverSocket.accept();

                        // 클라이언트로부터 데이터를 읽고 쓰기 위한 스트림 생성
                        BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                        PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);

                        // 클라이언트로부터 메시지 수신
                        String message = reader.readLine();

                        // JLabel에 메시지 설정
                        messageLbl.setText(message);

                        // 메시지 다이얼로그로 표시
                        JOptionPane.showMessageDialog(frame, message);

                        // 클라이언트 소켓 닫기
                        clientSocket.close();
                    }

 


 

ServerSocket serverSocket = new ServerSocket(1233); 

->  서버가 클라이언트와 연결을 수신하기위해 1233번 포트를 사용하여 서버 소켓을 열었다.


Socket ClientSocket = serverSocket.accept();

-> 이 코드는 서버 소켓이 클라이언트의 연결을 수락하고 클라이언트와의 통신을 시작하기 위해 대기한다는 것이다.

-> 즉 클라이언트가 서버측에 연결을 요청하면 서버는 이를 수락하고 서버가 클라이언트와 통신하기위한 소켓을

     Socket 타입의 ClientSocket객체에 담는다.


BufferedReader reader = new BufferedReader(new InputstreamReader(clientSocket.getInputStream()));

 

 

clientSocket.getInputStream()

->일단 위의 코드는 클라언트가 서버에게 데이터를 보냈을때 데이터를 받아서 읽어올수있게끔 해주는 코드이다.

 

-> 먼저 getInputStream() 메서드를 호출해서 클라이언트가 서버에게 보내는 데이터를 받아온다.

    즉 clientSocket 객체 안에 클라이언트가 서버에게 보내는 데이터가 들어있고 getInputStream()통해 데이터를 받아온다.

 

new InputstreamReader()

-> 바이트기반의 입력스트림을 문자 기반의 입력스트림으로 변환한다.

입력스트림

데이터를 읽어오는 스트림을 의미한다.
즉 보통 파일, 키보드입력, 데이터 소스로부터 데이터를 읽어올때 사용된다.

종류:
바이트 스트림
문자 스트림

Reader, Writer

-----------------------------------------------------------------------------------------------------------------
문자스트림

데이터를 문자 단위로 읽고 쓰는 스트림이다.
자바에서 문자 스트림은 문자열이나 문자 데이터를 읽고 쓰는 데 사용된다.


FileReader,  FileWriter, BufferedReader

 

 

new BufferedReader()

->입력스트림으로부터 문자를 읽어 오는 기능을 한다. reader 객체는 클라이언트가 보낸데이터를 문자단위로 

    버퍼링하여 읽어오기 위한 도구로 활용된다.

 


 

PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);

 

 

clientSocket.getOutStream()

->클라이언트 소켓의 출력 스트림을 반환한다. 

 

 

new PrintWriter()

->PrintWriter클래스는 텍스트를 쓰기위한 클래스이다. 즉  클라이언트에게 보낼 데이터를 getOutStream()로 가져오고

    PrintWriter로 래핑하여 클라이언트에게 데이터를 보낼준비를한다.

 

true

->두번째 옵션은 autoFlush 로, 이 매개변수가 true로 지정되면 PrintWriter가  'println', 또는 ' printf ' 또는  ' format ' 메서드

   를 호출하면 자동으로 버퍼를 비운다. 즉 한번 출력하면 내용물이 사라진다는것. 

   따라서 writer객체는 클라이언트 소켓의 출력 스트림을 텍스트로 래핑하여 클라이언트에게 데이터를 보낼때 사용된다.

 

 

출력스트림

데이터를 쓰는 작업을 수행하는 스트림이다.
보통 파일, 네트워크 연결, 콘솔출력 등과 같은 대상으로 데이터를 보낼때 사용한다.

 

 

 

 String message = reader.readLine();

-> readLine()은 BufferedReader 객체를 사용하여 입력스트림에서 한 줄을 읽어온다.

    reader객체는 BufferedReader 클래스의 타입이기때문에 사용하는데 문제없다.

                     

 

messageLbl.setText(message);
->클라이언트로 부터 받아온 문자열을 라벨에 설정한다.
            
                       

JOptionPane.showMessageDialog(frame, message);

->다이얼로그 상자를 통해 메세지를 표현한다.

 

 

 

 

 

 


 

 

클라이언트

public void sendOrderlist() {
		System.out.println("연결 완료");
		try {
            String message = orderaaaaaaaaaa  + totalPrice;
            		
            Socket socket = new Socket("localhost", 1233);
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
            writer.println(message);

            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            JOptionPane.showMessageDialog(frame, "주문요청완료");
            
            socket.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
	}