套接字编程的新手段。我正在制作一个HTTP服务器。在持久连接中,服务器发送第一个来自客户端的HTTP请求的第一个文件(1 MB文本文件)后,我保持打开套接字。之后,服务器和客户端程序只是闲置。我搜索了很多,发现recv()一直在查找套接字上的数据,直到套接字连接从服务器端关闭。即使套接字为空,C recv()仍会继续读取
如果持续连接,应该怎么办? 我正在读取客户端文件(文件包含很多行,每行只有一个文件名,通过持久连接从服务器获取)
发送文件的服务器代码的一部分要求:
while((bytesread = fread(filecontent,sizeof(char), 1024, fp))>0)
{
printf("Bytes Read:%d File Content:%s\n",bytesread,filecontent);
if((n = send(*newsockfd, filecontent, 1024,0))<0)
{
error("SERVER Error: Failed to Write File to Socket");
break;
}
bzero(filecontent,1024);
}
的客户端代码的一部分,我看已经由服务器发送的文件:
for(;;)
{
n=recv(socketfd, buffer, 1024,0);
printf("%d\n",n);
if(n>0)
{ printf("\n in while for reading the file for n bytes %d \n",n);
printf("Response:\n%s",buffer);
}
else if(n<0)
{
disperror("Error reading from socket");
}
if(n==0)
break;
}
已经花费了大量的时间。无法得到怎么办...
你是否在代码的客户端部分调用'connect'?在'recv'之前。 –
首先,你需要''发送'bytesread'字节,而不是硬编码'1024'。至于你的问题,你不知道什么时候该“挂断”并停止尝试接收数据的问题,或者......? –
,我不喜欢这个地方'if((n = send(* newsockfd,filecontent,1024,0))<0)'。你使用指向套接字'newsockfd'的指针?请在这里放置'newsockfd'变量的声明。 –