[BE/JAVA] 소켓통신 (예제코드 포함)

2022. 2. 2. 17:40
728x90
반응형

2022.02.02

81번째 포스팅

 

입사 332일차.

참여중인 프로젝트에서 소켓통신을 개발할 일이 생겼다.

개발방법이나 코드들은 대강 머리에 담아놓고 있었지만 실제로 개발해본 것은 처음이기 때문에 기록을 남기려고 한다.

 

 

 

0. 소켓통신?

  ① 양쪽(서버, 클라이언트)간의 통신을 위한 문을 만들어두고, 서로간의 메세지(byte)를 주고받을 수 있게 만들어주는 인터페이스

 

 

1. 사용하는 객체 및 메소드

Socket connect(IP주소, 포트번호) 원격 호스트에 대한 연결을 요청합니다.
setSoTimeOut(밀리세컨드) InputStream에서 응답메시지를 읽을 때 대기시간 설정
getOutputStream() 해당 소켓에 바이트를 쓰기 위한 OutputStream 객체를 생성
close() 통신연결을 닫고 연결된 리소스를 모두 해제합니다.
isClosed() 소켓이 닫혀있는 경우 true, 열려있는 경우 false를 리턴
OutputStream write(byte[]) 지정된 바이트 배열로부터 이 출력 스트림에 b.length 바이트를 출력합니다.
flush() 버퍼에 들어가 있는 출력 바이트를 모두 강제적으로 출력합니다.
close() 이 스트림에 관련된 모든 리소스를 해제합니다.
InputStrem read(byte[],  n,  m) 읽은 바이트들을 byte 배열에 index n부터 m까지 저장.
close() 이 스트림에 관련된 모든 리소스를 해제합니다.

 

 

2. 예시코드

  ① 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    public String practiceSocketConnect() {
        String socketSuccess = "N";
 
        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress("192.0.0.1"8080));
            socket.setSoTimeout(30000);
            
            byte[] bytes = null;
            String sendMessage = "";
            OutputStream os = socket.getOutputStream();
            sendMessage = "전문데이터생성"
            
            // UTF-8 CharSet의 byte타입으로 인코딩
            sendBytes = sendMessage.getBytes("UTF-8");
            os.write(sendBytes);
            os.flush();
 
            InputStream is = socket.getInputStream();
            byte[] resByte = new byte[500];
            is.read(resByte, 0500);
 
            // UTF-8 CharSet의 String타입으로 인코딩
            String resStr = new String(resByte, "UTF-8");
 
            
            os.close();
            is.close();
            socket.close();
            socketSucces = "Y";
            
        } catch(Exception e) {
            System.out.println("소켓통신에 실패했습니다!");
        }
        
        // 통신이 제대로 종료되지 않은 경우, 다시 한번 종료
        if (!socket.isClosed()) {
            try {
                socket.close();
            } catch(IOException ioe) {
                System.out.println("소켓통신에 실패했습니다!");
            }
        }
 
        return socketSuccess;
    }
cs

 

3. 결과

  ① 소켓통신에 성공하면 서버에서 보내주는 byte를 읽어서 subString으로 문자열을 잘라 사용하면 된다.

728x90
반응형

BELATED ARTICLES

more