我正在考虑通过 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/