在socket编程中怎么判断recv是不是接收完成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在socket编程中怎么判断recv是不是接收完成相关的知识,希望对你有一定的参考价值。
recv函数怎么判断接收结束:1、例如在数据流中带个结束标识,那样读到结束标识就知道传输完成,停止。 这种方法只能用传输文本文件,有个文件结束符,二进制文件不行。
2、先传个长度,那么接收方就可以控制 接下来要读取多少个字节的数据才算完成。这个适合传输任何文件。
例子:
C/C++ code
client的发函数为:char line[MAXLINE]; while ((fgets(line,MAXLINE,fd)!=NULL) // fd 为一个文件的指针 send (connfd, line,strlen(line),0) // connfd为 socketserver 的接收函数为:for (;;) if ((n=recv(connfd, recvline,MAXLINE,0)>0) recvline[n]=0;fputs(stdout,recvline);else break;
当发端停止发送后,收端无法得知数据已经传输完毕,从而一直在for中死循环,可以用以上方法判断接收结束。 参考技术A recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态,下面是我针对常见的几种网络状态的简单总结。 首先阻塞接收的recv有时候会返回0,这仅在对端已经关闭TCP连接时本回答被提问者和网友采纳
以上是关于在socket编程中怎么判断recv是不是接收完成的主要内容,如果未能解决你的问题,请参考以下文章