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, 0, 500);
// 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
반응형
'백엔드 > 자바' 카테고리의 다른 글
[BE/JAVA] Stream.anyMatch().allMatch() (0) | 2023.04.23 |
---|---|
[BE/JAVA] Stream.filter() (2) | 2022.06.08 |
[BE/JAVA] HashMap clear() vs new HashMap<>() (0) | 2021.12.26 |
[BE/JAVA] JSP에서 엑셀파일 읽어서 DB에 저장하기 - 3 (0) | 2021.07.03 |
[BE/JAVA] JSP에서 엑셀파일 읽어서 DB에 저장하기 - 2 (0) | 2021.07.01 |
댓글