CS

태태개발일지(소켓 통신)

태태코 2023. 10. 11. 16:21
반응형

소캣통신

서버와 유저가 데이터를 주고받으려면

-> http 요청을 통해서 

 

클라이언트: 데이터줘.

서버: 오케이.

 

실시간 리소스를 주어야할 때, 클라이언트: 내가 계속 요청을 해줘야해? 너가 그냥 알아서 보내주면 되잖아.

서버: 그럼 내가 server-sent event나 Web socket을 사용해볼게

 

server - sent event -> http통신을 종료안하고 계속 유지(단방향)

 

WebSocket -> http요청을 보내서 클라이언트: 오늘부터 웹소켓으로 할가?

서버: 좋아 그럼 websocket으로 업그레이드 해놓을게

 

<서버>

1. 서버소켓에 클라이언트의 주소와, 포트를 바인딩해준다.

2. 무한 루프를 돌면서 클라이언트의 접속을 대기한다.

3. 클라이언트가 인지 되었을 경우 인풋스트림과 아웃풋 스트림을 가져와 메세지를 받고, 메세지를 보내준다.

public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket =null;
        try{
            serverSocket = new ServerSocket();
            serverSocket.bind(new InetSocketAddress("0.0.0.0",8080));
            while(true){
                socket = serverSocket.accept();
                InetSocketAddress clientAddr = (InetSocketAddress) socket.getRemoteSocketAddress();
                socket.getRemoteSocketAddress();
                System.out.println("Conneted:"+clientAddr.getAddress()+":"+clientAddr.getPort());
                byte[] bytes = null;
                String message = null;

                InputStream is = socket.getInputStream();
                bytes = new byte[100];
                int readByteCount = is.read(bytes);
                message = new String(bytes,0,readByteCount,"UTF-8");
                System.out.println("Received: "+message);

                OutputStream os = socket.getOutputStream();
                message = "Hello Client!";
                bytes = message.getBytes("UTF-8");
                os.write(bytes);
                os.flush();
                System.out.println("Server: sent the message");

                is.close();
                os.close();
                socket.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        if(!socket.isClosed()){
            try{
                socket.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

 

 

<clinet>

1. 서버 주소와 포트를 통해 입장한다.

2. 서버에게 메세지를 보내준다.

3. 서버에게 메세지를 받는다.

public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket();
            System.out.println("Client!");
            socket.connect(new InetSocketAddress("127.0.0.1",8080));

            byte[] bytes = null;
            String message = null;

            OutputStream os = socket.getOutputStream();
            message = "Hello Server";
            bytes = message.getBytes("UTF-8");
            os.write(bytes);
            os.flush();
            System.out.println("Message sent!");

            InputStream is = socket.getInputStream();
            bytes = new byte[100];
            int readBytesCount = is.read(bytes);
            message = new String(bytes,0,readBytesCount,"UTF-8");
            System.out.println("Received: "+ message);

            is.close();
            os.close();
            socket.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
반응형

'CS' 카테고리의 다른 글

태태개발일지 - Docker  (0) 2025.04.16
태태개발일지(CS지식)  (0) 2023.09.21
태태개발일지(운영체제)  (0) 2023.09.06
태태개발일지(운영체제)  (0) 2023.09.05
태태코딩(운영체제)  (0) 2023.08.31