tcp file 전송 사라진 20byte는 ??

oldbell의 이미지


	/*
	Visual C++, C# 에서 socket connect ... 후에 데이터 전송 source 입니다.
	*/

				char buf[8192+1];
				int  rsize = 0, totrsize  = 0;
				int  ssize = 0, totssize = 0;
				int  totbufsize = 0;
				int  charsize = sizeof(char);

				FILE *fp;
				FILE *xf;
				fp = fopen("c:\\1.dat","r");
				xf = fopen("c:\\2.dat","w");
				memset(buf, 0x00,sizeof(buf));
				while (   (rsize=(int)fread(buf, charsize, 1024 ,fp))   >  0 ) {
					//m_Socket->Send(buf, rsize);
					ssize = m_pMainSocket->Send(buf, rsize);
					fwrite(buf,charsize,rsize,xf);
					Sleep(100);

					totbufsize += strlen(buf);
					totssize +=  ssize;
					totrsize +=  rsize;

					memset(buf, 0x00,sizeof(buf));
				}
				fclose(fp);
				fclose(xf);

1.dat의 file size는 2307 byte 인데 totsize의 값은 2287이 나옵니다. 2.dat가 생겼을때 1.dat와 2.dat는 동일하며 똑같이 2307 byte 입니다. (buf size의 합도 2287로 나옵니다.)

수신 쪽에서는 2287 Byte만 전송받은 것으로 나타는데.. 나머지 20byte는 어떻게 된건지 궁금합니다. ????
(전송되는 데이터 중에 NULL 문자는 없습니다.)

sjpark의 이미지

recv를 할때, 전송한 데이타 전체 크기만큼 받을때까지 루프를 돌려 주세요,.

4000 바이트 보내면
첨에 2000 바이트 보내고
두번째에 1000 바이트 보내고
세번째에 1000 바이트 보내고,.

send를 한다해도 한번에 보내지 못하는 경우가 있더군요

무슨 무슨 이유때문이라고 하는데,.
그게 기억이 안나네요,. ㅎㅎ

recv할때, 송신한 크기만큼 받을 수 있도록 루프 돌리는거 있지 마세요.

참,. 송신한 크기가 얼마인지 알기 위해서는
데이타 전송전에, 앞으로 전송될 패킷들에 대한 정보를 작게 만들어 전송해주는 쎈스!@

물론 더 효과적인 방법을 아시는 분이 있다면 리플 달리겠죠,.

수고하세요.

oldbell의 이미지

관심가져주셔서 감사합니다.

답변에 감사드리고요.

20byte가 무엇을 의미하는지는 알아냈습니다.

1.dat는 20줄짜리 file 이었는데 file의 1줄을 의미하는 ascii 10,13 code(2byte죠)가 데이터 전송시에는 1byte(10)으로 바뀌어져서 전송되는 것을 발견했습니다.

아래 코드로 해결되었습니다.

이전 : fopen("c:\\1.dat","r") 
이후 : fopen("c:\\1.dat","rb")

인생의 무게를 느껴라. 아는 만큼 보이는게다.

익명 사용자의 이미지

ssize = m_pMainSocket->Send(buf, rsize);
음 , 쿵~
이것만으로는 부족하다고 말씀드립니다.

실험을 해보세요.
0) 현재 잘된다고 생각하는 상태로 돌려본다.
--
1) 일단 송신할 파일이 큰것으로(적어도 수메가이상) ...
2) 수신측에서는 매 recv()전에 sleep(3초정도이상)
3) 아~ 수신이 잘되는가?

zelon의 이미지

그리고 전송하기 전에 수메가 파일의 MD5SUM 을 만들어놓고, 수신한 파일의 MD5SUM 을 체크해서 같은지 검사하는 정도의 센스~ ^^

-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com

댓글 달기

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