专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 网络通信

recv函数 怎么判断接收结束

发布时间:2011-07-03 07:13:35 文章来源:www.iduyao.cn 采编人员:星星草
recv函数 如何判断接收结束?
一个简单的程序,client端将一个文件的内容传送到server端。
C/C++ code


client的发函数为:
char line[MAXLINE]; 
while ((fgets(line,MAXLINE,fd)!=NULL)  // fd 为一个文件的指针
   {
send (connfd, line,strlen(line),0)         // connfd为 socket
}

server 的接收函数为:
for (;;) {
if ((n=recv(connfd, recvline,MAXLINE,0)>0) {
recvline[n]=0;
fputs(stdout,recvline);
else 
break;
}
}


现在的问题是:当发端停止发送后,收端无法得知数据已经传输完毕,从而一直在for中死循环,这个问题该如何解决呢?



------解决方案--------------------
一般这类传输问题,两种办法可以解决,一种,比如说在数据流中带个结束标识,那样读到结束标识就知道传输完成,停止。 这种方法只能用传输文本文件,有个文件结束符,二进制文件不行。

第二种,是先传个长度,那么接收方就可以控制 接下来要读取多少个字节的数据才算完成。这个适合传输任何文件。


- 千里孤行
------解决方案--------------------
在文件结束后加个自己认为的标识,在接收端,对接收的内容进行判断就可以了,当你收到是自己加的内容时,就结束接收,就OK了
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: