2014-10-24 3 views
0

이 코드는 잘 작동하지만 나는이에 그것을동일한 데이터를 보내고받을 때 동일한 파일을 쓰지 않는 이유는 무엇입니까?

  FILE *my_file = fopen(filename, "ab"); 

      while(size>0){ 
       size = recvfrom(s, buffer, 128, 0, (LPSOCKADDR) &sa_in, &senderSize); 

       if(size > 0) 
       { 

        fwrite(buffer, 1, size, my_file); 
        memset(buffer, 0x0, 128); 


       } 
      } 

수정 :

  FILE *my_file = fopen(filename, "ab"); 

      while(size-128>0){ 
       size = recvfrom(s, packet, 256, 0, (LPSOCKADDR) &sa_in, &senderSize); 

       buffer = getBuffer(packet); //first 128 bytes = control data 

       if(size-128 > 0) 
       { 

        fwrite(buffer, 1, size-128, my_file); 
        memset(buffer, 0x0, 128); 


       } 
      } 

을하고 난 나는이 정보가 정확히 동일한 버퍼 인쇄 할 때 비록 완전히 다른 뭔가를 얻을. 대신이 점점

:

ÿØÿà JFIF H H ÿþ Content First 
ÿÛ C   

$.' ",#(7),01444'9=82<.342ÿÛ C   

2!!22222222222222222222222222222222222222222222222222ÿÀ 2 2" ÿÄ    ÿÄ 0   !1"AQaq2BC±‘’áðñÿÄ    ÿÄ   !Aa1ÿÚ ? ¶u¢¦¡7*à\îÜ_vÚwpOOªùjÕ[ÒR`ÜYZÕûJ;ý§ªÖ/NNÕ*¶‡b`l<µ I÷à¤}Vˆ¤ä$žvþ]©È>_Ít!®¥ÛìçÏeÆm%Ñë 
W˜ájäðÅÚàÒsÂú‚GÑ8ó­‚ÓÚf ·É*“%sX C»Fx뻵W­/eµú‹ò•©i]bo³W 
S 
±[email protected] …ã9ÁIã=}ªUk¦æ¾þŸ´«ÆèB?‡p”äŒíÇ\yóëY,rº6ycÆË"•„ÂÞDvëËqÄ ¯ºÆãŽN<©YšÇk6—¢j£r-­1¥¶„‡B|;ÀÆ3ô 
hDí$d$¤äÒkխЮqû‰ÑY’Ös±Ô }yóªÞãØÔg$¾íºæ¶P%:×x}7g¦}³óNâϪBYµäåÊ%@€vd§<=zgÚ¹ I…dŽI<“Èô®s­ó­”ÊŒã¦÷-²”©I<€@çʸ3Þ:”»·€¢ 
LüškèŸÂJ=Æà‰ u¹N¶éh0§¡¸¶ Iëúq[¯f1a¿x’ꑹö›Ê@QêîŸ_u¦I²]á5ßÉ1¦â%Èå) ÈŸLãúÕù¤¬û•”ÂîÜSÈ9%#—IÏÇ ¥³I(õèÖ7;~錣ġǵ+¾”‰Ð+ÞÕuÛ-¶ùÆ+ï¸J”ŒïÚ=:gÜžjg³ëÌ«Ö’"{ÅÙ‰ZÐâ” ' 
àà{S7<k©hOHy¦–C{p‡BO^>EvÈ·G~Dyv>Áð8Žß4û¤úVŽQà£FJæå}Ú¶ÇSYÌ\L;–_) 
Ú@Îx<29#ø©˜Vø0­íć–â¤xP„¿?沈@ õ£-Öép®V©h0¤˜±PÐHdcÅÈë““ÿ j¶Ú«-Å)]“!³6ОFXy²Ú’8ð‘Ž+NÚWc±F¶®A‘Ün Z†ÝĤ}ÕJR¢ÝQ4®Å)J‚E)J R” )J R” ÿÙ 

나는이 점점 오전 :

128 
╪ α 
128 
222222222222222222222222222222222222222222222222 └ 
128 
1‼"AQaqü¶2BC▒æÆß≡± ─ 
128 
J;↨²º♠¬▲╓/NN╒*╢b♂`l<☻╡ 
128 
nQ à♀πÉ9┴Iπ=}¬‼Ukªµ╛■ƒ┤½╞ΦB?▲çpöΣîφ╟\y≤δY,r║6yc╞╦"òä┬▐DvÉδ╦q─á♣»║╞πÄN<⌐Yܶ╟k6ùój 
hDφ$d∟$ñΣ▲⌂╥k╒‼¡╨«q√ë╤YÆ╓s▒╘♣ 
128 

128 

128 
₧jg│δ╠½╓ÆÅ"{┼┘ëZ╨Γö 
113 
ê♦►@ ⌡♠ú-╓Θp«‼V⌐h0▬ñÿ▒P╨Hdc┼╚δôô 

로 :

ÿØÿà                               222222222222222222222222222222222222222222222222ÿÀ                    1"AQaq2BC±‘’áðñÿÄ                           J;ý§ªÖ/NNÕ*¶‡b`l<µ                          [email protected] …ã9ÁIã=}ªUk¦æ¾þŸ´«ÆèB?‡p”äŒíÇ\yóëY,rº6ycÆË"•„ÂÞDvëËqÄ ¯ºÆãŽN<©YšÇk6—¢j£r-­1¥¶„‡B|;ÀÆ3ô 
hDí$d$¤äÒkխЮqû‰ÑY’Ös±Ô                                                                žjg³ëÌ«Ö’"{ÅÙ‰ZÐâ”                            ˆ@ õ£-Öép®V©h0¤˜±PÐHdcÅÈë““ÿ 

이 내가 성공적으로 바이너리 파일을 전송하고 콘솔 출력을 보시다시피, 데이터를 콘솔 형태로 쓰는 대신 폼처럼 쓰게됩니다. uld 수 있습니다.

편집 :이 다른 프로그램의 콘솔 출력

:

0 

 ╪ α 


buffer: ╪ α 
0 

222222222222222222222222222222222222222222222222 └ 

130 
buffer:222222222222222222222222222222222222222222222222 └ 
0 

1‼"AQaqü¶2BC▒æÆß≡± ─ 


buffer:1‼"AQaqü¶2BC▒æÆß≡± ─ 
0 

J;↨²º♠¬▲╓/NN╒*╢b♂`l<☻╡ 


buffer:J;↨²º♠¬▲╓/NN╒*╢b♂`l<☻╡ 
0 

nQ à♀πÉ9┴Iπ=}¬‼Ukªµ╛■ƒ┤½╞ΦB?▲çpöΣîφ╟\y≤δY,r║6yc╞╦"òä┬▐DvÉδ╦q─á♣»║╞πÄN<⌐Yܶ╟k6ùój 
hDφ$d∟$ñΣ▲⌂╥k╒‼¡╨«q√ë╤YÆ╓s▒╘♣ 


buffer:nQ à♀πÉ9┴Iπ=}¬‼Ukªµ╛■ƒ┤½╞ΦB?▲çpöΣîφ╟\y≤δY,r║6yc╞╦"òä┬▐DvÉδ╦q─á♣»║╞πÄN<⌐YÜ 
hDφ$d∟$ñΣ▲⌂╥k╒‼¡╨«q√ë╤YÆ╓s▒╘♣ 
0 




buffer: 
0 




buffer: 
0 

₧jg│δ╠½╓ÆÅ"{┼┘ëZ╨Γö 


buffer:₧jg│δ╠½╓ÆÅ"{┼┘ëZ╨Γö 
0 

ê♦►@ ⌡♠ú-╓Θp«‼V⌐h0▬ñÿ▒P╨Hdc┼╚δôô  


buffer:ê♦►@ ⌡♠ú-╓Θp«‼V⌐h0▬ñÿ▒P╨Hdc┼╚δôô  
. 

답변

0

당신이 memset 함수에 대한 (128)을 유지하는이

memset(buffer, 0x0, 128); 

memset(buffer, 0x0, 256); 
+0

작동하지 않습니다. 그것은 데이터를 올바르게 보내고 올바르게 쓰지 않습니다. 어떻게 든 버퍼를 변환하기 위해 변환해야한다고 생각합니다. – socket

+0

그래서 문제가 있습니다 버퍼 = getBuffer (패킷); – dariogriffo

+0

일 수도 있지만, 출력물을 출력 할 때 콘솔 출력은 동일합니다. – socket

0
시도
fwrite(buffer, 1, size, my_file); 

size, 다른 말로는 size - 128과 달라야한다고 생각합니다.

+0

작동하지 않습니다. – socket

관련 문제