c - 在 C 中通过 TCP 套接字发送视频的最佳方式

标签 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);

}

我是否可以将缓冲区保存为文件 movie.mp4 或类似的文件?我意识到我可能需要更改我的缓冲区大小或可能以 block 的形式发送它。但我找不到任何关于执行此操作的最佳方法的好信息。任何帮助或正确方向的观点将不胜感激!

最佳答案

您会将缓冲区 block 写入文件。

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

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


   int outfd;
   outfd = open("movie.mp4", O_WRONLY|);

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

   numWrite = write(outfd, buff, numChar);

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

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

关于c - 在 C 中通过 TCP 套接字发送视频的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4847025/

相关文章:

c - Linux客户端套接字: can't set O_NONBLOCK before connect?

android - Laravel:如何为 web、android 和 ios 构建实时聊天?

windows - 使用批处理根据分辨率重命名我的视频文件

css - 将 html 5 视频匹配到 css 全屏背景

C:如何在没有 strtol 的情况下从字符串中提取数字

c - 如何将 unsigned char * 转换为 QString

java - 如何在socket编程中制作多条消息?

c - MPFR、printf、小数位、语言环境、文件 i/o 问题

线程可以在不锁定的情况下写入同一结构数组的不同元素吗?

android - 无法从远程 url 在 android VIdeoview 中播放 mp4 视频