C 接收rtp数据包并将其写入二进制文件
我从服务器接收rtp数据包,我必须将它们写入.mp3文件,我有一些关于如何完成此任务的问题。我正在接收的最后一个数据包包含一个“END”字符串。 我的代码如下:C 接收rtp数据包并将其写入二进制文件,c,C,我从服务器接收rtp数据包,我必须将它们写入.mp3文件,我有一些关于如何完成此任务的问题。我正在接收的最后一个数据包包含一个“END”字符串。 我的代码如下: int size = 524; char rtp[size]; FILE *f; f=fopen("music.mp3","wb"); while(strcmp((char *)rtp, "END")){ recvfromserver(socket,rtp,sizeof(rtp)); fwrite(rtp, siz
int size = 524;
char rtp[size];
FILE *f;
f=fopen("music.mp3","wb");
while(strcmp((char *)rtp, "END")){
recvfromserver(socket,rtp,sizeof(rtp));
fwrite(rtp, sizeof(rtp), 1, f);
}
fclose(f);
我的问题如下:
int size = 524;
char rtp[size];
FILE *f;
f=fopen("music.mp3","wb");
while(strcmp((char *)rtp, "END")){
recvfromserver(socket,rtp,sizeof(rtp));
fwrite(rtp, sizeof(rtp), 1, f);
}
fclose(f);
char是这种类型的数据包的正确类型吗?我必须用二进制写文件,所以我不知道我是否做对了
如何在不写入rap数据包头的情况下写入文件?这个头是12B,我应该在执行fwrite()之前删除它,但我不知道是否必须使用char或int
提前多谢 Yes
char*
是适合您需要的数据类型。事实上,我更倾向于使用无符号字符*
我已对您的代码进行了以下修改:-
- 初始化rtp缓冲区-考虑一种情况,定义rtp的堆栈内存包含
?您的写入循环将永远不会执行。从堆栈中初始化变量始终是一个很好的做法“END\0XXX”
- 因为您说不需要从rtp写入前12个字节,所以我在
fwrite
- 将
的第二个参数调整了12个字节,以确保您写入的表单不超过524个字节的fwrite
rtp
- 您可能需要考虑从
中得到的是以null结尾的字符数组吗李>recvfromserver
int size = 524;
char rtp[size] = {0}; //Initialized rtp
FILE *f;
f=fopen("music.mp3","wb");
while(strcmp((char *)rtp, "END")){
recvfromserver(socket,rtp,sizeof(rtp));
fwrite(rtp+12, sizeof(rtp)-12, 1, f); //adjusted for 12 bytes of header
}
fclose(f);
这正是我所错过的!非常感谢!使用
memcmp
而不是strcmp
!