Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 接收rtp数据包并将其写入二进制文件_C - Fatal编程技术网

C 接收rtp数据包并将其写入二进制文件

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

我从服务器接收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, 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
  • fwrite
    的第二个参数调整了12个字节,以确保您写入的表单不超过524个字节的
    rtp
  • 您可能需要考虑从
    recvfromserver
    中得到的是以null结尾的字符数组吗
修改代码:-

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