首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

recv函数 怎么判断接收结束

2012-03-05 
recv函数 如何判断接收结束?一个简单的程序,client端将一个文件的内容传送到server端。C/C++ codeclient的

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了

热点排行