TCP 기반 채팅 프로그램(서버는 c-linux, client는 java) 다대다 채팅(일대일 귓속말 기능과 파일전송 기능 추가) 관련해 질문드립니다.
제목에 작성한대로 서버는 리눅스 기반의 c를 기반으로 TCP로 구현했습니다. 그리고 client는 자바로 gui를 구현하여 완성하려고 합니다.
지금 현 상태는 일반 다대다 채팅은 제대로 작동되지만, 파일전송과 귓속말 측면에서 문제가 발생하였습니다.
TCP의 특성상 boundary가 없어서, 클라이언트에서 서버로 write한 정보가 묶여져서 한꺼번에 전송될 수도 있고, 아니면 따로 따로 갈수도 있다는 것을 이제서야(까먹었다가... 어느정도 구현후에) 알게 되었습니다. 서버에서 클라이언트로 보낼때도 마찬가지 입니다.ㅠ
저같은 경우에는 특정한 토큰(예로 $filesend, $onetoone)을 활용하여, 서바가 전달받은 내용에 해당 토큰이 존재하면, 파일전송이나 일대일 채팅을 기능을 따로 수행하도록 했습니다. 그런데도, 경계(boundary)가 없는 TCP의 속성때문에, 원치 않는 정보까지 받아오거나, 한꺼번에 전송되길 바라는 일대일 채팅 내용이 끊겨서 전송되는 등 문제가 발생합니다.
서버와 클라이언트간에 송신 수신하는 소켓이 하나이기때문에 발생하는문제 인것 같습니다.
지금의 상태에서는 boundary가 없는 tcp 기반에서 어떻게 다대다채팅이 되는 상태에서 유저가 따로 파일전송과 귓속말 기능을 사용하고 할 때 그 기능을 따로 서버가 해주게 하는지 궁금합니다. 파일전송, 일대일채팅, 다대다 채팅, 따로따로는 다 구현했는데, 이것을 합쳐서 하나의 프로그램을 만드려니, 마음 먹은대로 되지가 안네요.
아니면 이러한 기능을 하려면 tcp 로 안되고 udp로 해야만 하는 건가요?
구현에 대한 전반적인 조언, 방향,어떤식으로 개발해야할지에 대한 조언 부탁드리겠습니다.
댓글 달기