在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是不是接收完成的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程之socket之send和recv原理剖析

linux socket阻塞recv怎么返回

Socket 编程——recv() 无法获取所有数据

判断socket断开连接的方法

c语言如何检测网络是不是连接

socket网络编程:粘包现象以及解决方法(代码完善)