TCP 기반 채팅 프로그램(서버는 c-linux, client는 java) 다대다 채팅(일대일 귓속말 기능과 파일전송 기능 추가) 관련해 질문드립니다.

sun9480의 이미지

제목에 작성한대로 서버는 리눅스 기반의 c를 기반으로 TCP로 구현했습니다. 그리고 client는 자바로 gui를 구현하여 완성하려고 합니다.
지금 현 상태는 일반 다대다 채팅은 제대로 작동되지만, 파일전송과 귓속말 측면에서 문제가 발생하였습니다.
TCP의 특성상 boundary가 없어서, 클라이언트에서 서버로 write한 정보가 묶여져서 한꺼번에 전송될 수도 있고, 아니면 따로 따로 갈수도 있다는 것을 이제서야(까먹었다가... 어느정도 구현후에) 알게 되었습니다. 서버에서 클라이언트로 보낼때도 마찬가지 입니다.ㅠ

저같은 경우에는 특정한 토큰(예로 $filesend, $onetoone)을 활용하여, 서바가 전달받은 내용에 해당 토큰이 존재하면, 파일전송이나 일대일 채팅을 기능을 따로 수행하도록 했습니다. 그런데도, 경계(boundary)가 없는 TCP의 속성때문에, 원치 않는 정보까지 받아오거나, 한꺼번에 전송되길 바라는 일대일 채팅 내용이 끊겨서 전송되는 등 문제가 발생합니다.

서버와 클라이언트간에 송신 수신하는 소켓이 하나이기때문에 발생하는문제 인것 같습니다.
지금의 상태에서는 boundary가 없는 tcp 기반에서 어떻게 다대다채팅이 되는 상태에서 유저가 따로 파일전송과 귓속말 기능을 사용하고 할 때 그 기능을 따로 서버가 해주게 하는지 궁금합니다. 파일전송, 일대일채팅, 다대다 채팅, 따로따로는 다 구현했는데, 이것을 합쳐서 하나의 프로그램을 만드려니, 마음 먹은대로 되지가 안네요.

아니면 이러한 기능을 하려면 tcp 로 안되고 udp로 해야만 하는 건가요?

구현에 대한 전반적인 조언, 방향,어떤식으로 개발해야할지에 대한 조언 부탁드리겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.