我在网络课程中有一个作业,在那里我实现了一个简单的客户端服务器应用程序,该应用程序将文件(文本(从服务器下载到客户端。我通过在服务器端连续读取文件并通过send
发送数据并通过recv
调用接收数据来实现这一点。文本文件效果很好。
但我想实现(不是作业的一部分(向此应用程序发送视频功能:D(朋友之间不需要笔式驱动器!我使用了与发送文件相同的代码,希望它能工作。如果我在自己的机器上运行代码(在我的机器上运行的服务器和客户端(,则视频已成功传输。但是当服务器和客户端在不同的机器上运行时(我朋友笔记本电脑上的服务器和我朋友的客户端上的客户端(,我得到视频文件,但文件损坏了!:(
用于发送文件的服务器代码段:
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 readingn");
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");
下载后的视频文件给出错误:This file is incomplete and cannot be played.
。我真的很想制作这个网络应用程序,我可以在日常生活中使用!知道,片段在哪里出错吗?任何帮助表示赞赏。提前感谢!:)
另一种方式 - 等待消息的所有数据:
while((bytesReceived = recv(socket_client, recvBuff, 1024, MSG_WAITALL)) > 0)