소켓 프로그래밍에서..

blue의 이미지

서버에서 두줄 이상을 전송할 일이 있는데, 두줄을 연속해서 전송을 하니

클라이언트에서는 한줄밖에 출력이 되지 않네요..

클라이언트 문제인가요? :-(

익명 사용자의 이미지

^^

익명 사용자의 이미지

서버에서 두줄 이상을 전송할 일이 있는데, 두줄을 연속해서 전송을 하니

클라이언트에서는 한줄밖에 출력이 되지 않네요..

클라이언트 문제인가요?

1. 서버에 두줄이상을 전송
2. 클라이언트에는 한줄만 출력.

죄송한데 제가 무슨 말씀인지 잘 모르겠네요. ECHO 서버인지 잘 몰겐네요. 하여간 제가 대충 억측해서 대답을 드리면 예전에 제가 한번 이런 대답을 드린적이 있는데

TCP/IP 통신에서는
1. 보내는쪽은 얼마를 보낼지 알수가 있지만 받는 쪽은 얼마를 받을지 전혀 알수가 없다.

2. 보내지는것은 받는것이 반드시 보증된다.

따라서 보낸만큼 받아야만 합니다. 않그러면 통신이 블록에 걸리게 되어 중간에 정지해 있습니다. 만약 제가 10 바이트를 보내는데 받는쪽에서 20 바이트가 올거라고 계속 기다리게 하면 고장이 난다는 것이죠.

그래서 꼭! 보내는 쪽에서 얼마를 보내니깐 받는쪽에서는 이것을 알고 있어서 그 사이즈만큼 받아야만 합니다. 예를 들면 전문을 보낼때 앞에 10 바이트에 보내는쪽에서 보내는 메시지의 크기를 지정해 놓습니다. 그러면 받는 쪽에서는 처음에 10 바이트만 받아 보면 뒤에 몇바이트가 더 올지 알수가 있으니 그 양만큼만 받게 해주면 됩니다. 이때 몇가지 처리를 해주실수가 있는데...

1. NON BLOCK MODE로 받게 한다(혹은 보낸다)
2. SELECT/ALARM등을 이용해서 TIME OUT을 설정해둔다.

이러면 거의 에러없이(정말 거의) 보내고 받을수가 있습니다. 그런데 지금 보내시는 방식이 엔터라는 구분자가 존재 하기 때문에 이것을 가지고 할수도 있습니다. 즉, 받는 쪽에서 엔터가 두번 들어 오니깐 엔터를 기준으로 두번 받게 해놓으시면 될겁니다. 즉, READ나 RECV쪽에서 받는데 중간에 엔터를 검사하게 하면 됩니다. 이것은 LOOP을 돌려 봐야 합니다.

주의 하실점은 단지 \n 개행 문자인지 \r\n(DOS 모드) 인지 확인 하시면 됩니다. 즐거운 하루 되세요.

choissi의 이미지

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.