recv函数 怎么判断接收结束
recv函数 如何判断接收结束?一个简单的程序,client端将一个文件的内容传送到server端。C/C++ codeclient的
recv函数 如何判断接收结束?
一个简单的程序,client端将一个文件的内容传送到server端。
C/C++ codeclient的发函数为: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了