为什么我在发送和接收相同的数据时没有写入相同的文件

How come I am not writing the same file when I am sending and receiving the same data?

本文关键字:文件 数据 为什么      更新时间:2023-10-16

这段代码运行良好,但后来我修改了它

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

您为memset 保留128

memset(buffer, 0x0, 128);

试试这个

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

我认为你应该放一些与size不同的东西,很可能是size - 128