在C语言中通过TCP Socket发送视频的最佳方式

Bry*_* G. 5 c sockets video tcp

我试图想出通过TCP套接字发送视频文件的最佳方法.我已经制作了一个标准的套接字程序,但在read命令之后我不确定如何保存它.

代码示例

//bind server socketfd
if (bind(sfdServer, (struct sockaddr*)&adrServer, ServerAddrLen) < 0)
    error("ERROR binding");
listen(sfdServer, 5);
while(1){
    printf("Waiting for connections...\n");
    sfdClient = accept(sfdServer, (struct sockaddr*)&adrClient, &ClientAddrLen);
    if(sfdClient < 0)
        error("ERROR accepting");

    printf("Connection Established.\n");
    //set buffer to zero        
    bzero(buff, 2048);
    printf("Reading from client.\n");
    numChar = read(sfdClient, buff, 2048);

    //What should go here?

    close(sfdClient);
    close(sfdServer);

}
Run Code Online (Sandbox Code Playgroud)

我只是将缓冲区保存为文件movie.mp4或类似的东西吗?我意识到我可能需要更改缓冲区大小或者可能需要以块的形式发送它.但我找不到有关最佳方法的任何好信息.任何帮助或正确方向的一点将不胜感激!

pay*_*yne 4

您可以将缓冲区块写入文件。

首先,打开一个输出文件进行写入:

   #include <sys/types.h>
   #include <sys/stat.h>
   #include <fcntl.h>


   int outfd;
   outfd = open("movie.mp4", O_WRONLY|);
Run Code Online (Sandbox Code Playgroud)

然后,在 后面read()写入您的字节:

   numWrite = write(outfd, buff, numChar);
Run Code Online (Sandbox Code Playgroud)

请注意,您将需要处理许多分块/缓冲情况,例如:

  • read()返回write()零或-1(错误)
  • 读取直到没有更多字节可用。现在,您的代码仅读取 2048 字节,然后关闭套接字。
  • 写入的字节write()数少于请求的字节数(这可能发生在网络文件系统上)