데이터 전송에 관한 문의 입니다...

kdonny의 이미지

서버에서 클라이언트로 데이터를 전송해야하는데
클라이언트에서 한번에 받을수 있는 데이터가 128k밖에 되지않습니다.

그런데 서버에서 보내는 데이터는 1000k가 넘습니다..
보내는 글이 한글이라 보낼때 한글이 잘릴 염려가 있습니다.

이것을 어떻게 보내는게 좋을까요...

정말 고민입니다....

고수님들의 고언을 부탁드림니다...

펑키의 이미지

안녕하세요. 정확히 어떠한것을 원하시는지 몰라서 제가 대강 추측해봅니다.

1. 클라이언트가 받자 마자 출력해야 되는 경우
서버는 1000을 보내도 클라이언트는 100밖에 못받는다. 하지만, 받자 마자 출력해야 된다. 이런 경우에는 데이터를 받자 마자 끝부분(마지막 바이트)의 유효성을 검사해보세요. 만약 이것이 공백/일반 영문자/일반 아스키라면 출력을 해주고 아니면 다음에 따라올 데이터에 붙여서 완성해주세요. 한글은 2바이트니깐 뒤에 붙여서 해주시면 될겁니다.

2. 데이터의 끝을 알수가 있으면 데이터의 전송이 끝난후에 모아서 출력해주기.

이렇게 하면 해결되지 않을까요.?

stoneshim의 이미지

그렇습니다.

대부분 패킷정의를 할 때 (1)각 패킷의 크기를 고정시키는 방법이 있구요. (2)각 패킷이 어떻게 끝나는지를 정의하고 크기는 유동적으로 하는 방법이 있습니다.

(1)의 경우로 한다면 패킷의 크기는 클라이언트에서 받을 수 있는 크기보다 같거나 작아야 할 것이구요, 그래서 서버측에서 보내야 할 데이터가 크다면 패킷에 나누어 보내야 합니다. 이 경우 패킷의 헤더 혹은 테일에 continue flag를 정의해서 뒤에 더 올 데이터가 있다/없다 를 표시하면 됩니다.

(2)의 경우라면 패킷이 어떻게 끝나는지 정의되어 있으므로, 서버측에서는 데이터의 길이에 상관없이 한꺼번에 다 보내도 됩니다.

한글(2byte 문자들)의 문제는 어차피 합쳐서 보여줄 것이므로 상관 없습니다.

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

frowt의 이미지

참고로 말씀드려서
IP v4(흔히 사용하는) 의 Socket Buffer 의 크기는 16bit 즉 64k 입니다.
다시말해서 한번에 받을수 있는 크기는 64k 를 넘지 않는다는 얘기입니다.
128k 를 받았다면 뭔가 잘못 아신게 아닌가 싶네요
그리고 경험상 플랫폼에 따라서 그리고 어떻게 처리되느냐에 따라서
크기가 64k, 48k, 32k 변하더군요
그러니 특정 size 에 의존하지 않는것이 좋을듯 싶네요

댓글 달기

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