recv가 데이터를 받지 못합니다.

gurugio의 이미지

겨우 초당 몇십 킬로바이트 정도의 데이터를 받는

프로그램인데요

서버에서 데이터를 이상없이 보내는 것은 확인했는데

이 프로그램에서 받은 데이터를 출력해보면

보낸 값들을 다 출력하지 못하고

매우 많이 잊어먹고 있습니다.

이상해서 sleep(1)을 중간에 넣어줬더니

전혀 이상한 값들을 출력하네요.

recv 함수가 느린 것은 아닐텐데 뭐가 문제일까요?

고맙습니다.

서지훈의 이미지

보내는 부분과 받는 부분 관련된 소스를 보여주세요 ~~~

show me the source

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

gurugio의 이미지

받는 데이터가 15바이트여야 하는데

지금보니 75바이트가 받아졌다고 나오네요.

버퍼에 여러개가 받아지는 경우도 있나요?

버퍼값을 나눠서 확인해봐야겠지만

한번 recv에 여러개의 데이터가 받아지는 경우가 있는지 몰랐습니다.

네트워크 프로그래밍은 거의 해본적이 없어서 당황스럽네요.. oops

ctcquatre의 이미지

qurugio wrote:
한번 recv에 여러개의 데이터가 받아지는 경우가 있는지 몰랐습니다.

tcp에서 recv일경우 특별한 설정이 없으면
해당 소켓에 대한 데이터만 받아오기때문에.
클라이언트에서 보낸 고대로의 데이터를 받아옵니다.

흠..

Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.

kslee80의 이미지

TCP 소켓이라면 충분히 그런 현상이 생기고도 남습니다;;

TCP 소켓은 send() 를 호출했다고 해서 패킷이 출발하는 것도 아니고,
패킷이 "앞에 놈이랑 나는 다른 놈이다!" 라는 표식을 달고 다니지도 않습니다.

그래서 TCP 로 서로 통신하는 C/S 프로그램을 짤 때는
고정크기의 자료구조를 잡아서 recv() 하는 측에서 해당 크기만큼씩 처리하거나
데이타의 길이를 먼저 보내고 데이타를 보내는 식으로 하는 경우가 많죠.

ctcquatre의 이미지

흠 제가 글을 잘 이해하지 못했던것 같네요.

kslee80님의 말씀대로입니다.

그래서 대충.
int totalsize;
recv(sock,(char *)totalsize,sizeof(int),0)

해서 totalsize의 값을 읽어드린 다음에 다시
recv(sock,buffer,totalsize,0);
와 같은식으로 읽어오게 됩니다.

잘읽어보고 답글을 달아야 되는데 ^^;

Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.

댓글 달기

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