为什么我在发送和接收相同数据时不写相同的文件?

时间:2014-10-24 15:49:05

标签: c++

此代码工作正常,但后来我对其进行了修改

            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
±$Fn@Q …ã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” ÿÙ

我得到了这个:

ÿØÿà                                                                                                                            222222222222222222222222222222222222222222222222ÿÀ                                                                              1"AQaq2BC±‘’áðñÿÄ                                                                                                           J;ý§ªÖ/NNÕ*¶‡b`l<µ                                                                                                        n@Q …ã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ÅÈë““ÿ

这是我成功传输二进制文件时的控制台输出:

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┼╚δôô 

正如您所看到的,它会将数据写入控制台中,而不是以应有的形式编写。

编辑:

这是其他程序的控制台输出:

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┼╚δôô 
.

2 个答案:

答案 0 :(得分:0)

你要保留memset的128

memset(buffer, 0x0, 128);

试试这个

memset(buffer, 0x0, 256);

答案 1 :(得分:0)

fwrite(buffer, 1, size, my_file);

我认为你应该提出与size不同的内容,最有可能是size - 128