Java I/O issue debugging
2015-11-14
이슈: https://github.com/KimDahye/chat-program/issues/2
문제 1
- client code
output = new PrintWriter(socket.getOutputStream(), true); output.print(message); //message는 String
- server code
streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream())); streamIn.readUTF();
오라클 문서를 보면 output.print(message);
은 default encoding type으로 encoding 한다고. 즉, PrintWriter는 지 나름대로 encoding을 할 텐데 서버에서 UTF로 읽으려고 하니까 encoding protocol이 안맞아서 문제가 되었다.
문제 2
- client code
String line = input.readLine();
- server code
output.print(message);
server는 \n
을 뒤에 붙여보내지 않는데, client는 readLine()
을 하기 때문이다….! 끝에 라인을 붙이냐 안붙이냐도 서버, 클라이언트가 맞춰야할 프로토콜!
결론
간단한 프로토콜을 잘 신경쓰자!! 웬만하면 I/O는 짝을 맞춰 쓰는 게 문제 없이 작동하겠다.