gpt4 book ai didi

c - 用C语言制作我自己的视频发送网络应用程序

转载 作者:行者123 更新时间:2023-11-30 16:42:18 25 4
gpt4 key购买 nike

我在网络类(class)中完成了一项作业,其中我实现了一个简单的客户端服务器应用程序,该应用程序将文件(文本)从服务器下载到客户端。我通过连续读取服务器端的文件并通过 send 发送数据并通过 recv 调用接收数据来完成此操作。文本文件效果很好。

但我想为这个应用程序实现(不是作业的一部分)视频发送功能:D( friend 之间不需要笔驱动器!)。我使用与发送文件相同的代码希望它能工作。如果我在自己的计算机上运行代码(服务器和客户端在我的计算机上运行),则视频已成功传输。但是,当服务器和客户端在不同的计算机上运行时(服务器在我 friend 的笔记本电脑上,客户端在我的笔记本电脑上),我得到了视频文件,但文件已损坏! :(

用于发送文件的服务器片段:

void sendFile(FILE * fp, int * arg )
{
int socket=(int)*arg;

while(1)
{
/* First read file in chunks of 256 bytes */
char buff[1024]={0};
if(fp==NULL)
{
printf("File open error");
return;
}

int nread = fread(buff,1,1024,fp);

/* If read was success, send data. */
if(nread > 0)
{

if(nread != 1024)
buff[nread] = 0;
send(socket, buff, nread,0);
}
if (nread < 1024)
{
if (ferror(fp))
printf("Error reading\n");
break;
}
}
}

用于接收文件的客户端片段:

FILE * fp = fopen(fileName,"wb");
if(fp == NULL)
{
printf("Error opening file");
return 1;
}

int bytesReceived = 0;
char recvBuff[1024];
while((bytesReceived = recv(socket_client, recvBuff, 1024,0)) > 0)
{
fwrite(recvBuff, 1,bytesReceived,fp);
if(bytesReceived < 1024)
break;
}
fclose(fp);
printf("File successfully downloaded!\n");

下载后视频文件出现错误:此文件不完整,无法播放。。我真的很想制作一个可以在日常生活中使用的网络应用程序!知道片段哪里出错了吗?任何帮助表示赞赏。提前致谢! :)

最佳答案

另一种方法 - 等待消息的所有数据:

while((bytesReceived = recv(socket_client, recvBuff, 1024, MSG_WAITALL)) > 0)

关于c - 用C语言制作我自己的视频发送网络应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com