recv函数 如何判断接收结束?

ajige 2010-10-17 04:14:15
一个简单的程序,client端将一个文件的内容传送到server端。


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中死循环,这个问题该如何解决呢?

...全文
1254 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mcupro 2010-10-23
  • 打赏
  • 举报
回复
MARK一下 以后 有用
zzrsad 2010-10-22
  • 打赏
  • 举报
回复
在文件结束后加个自己认为的标识,在接收端,对接收的内容进行判断就可以了,当你收到是自己加的内容时,就结束接收,就OK了
ajige 2010-10-17
  • 打赏
  • 举报
回复
谢谢~~~
再问一下,,如果是带文件结束符的话,(即第一种方法)接收端的代码应该如何写呢?
yanghehong 2010-10-17
  • 打赏
  • 举报
回复 1
一般这类传输问题,两种办法可以解决,一种,比如说在数据流中带个结束标识,那样读到结束标识就知道传输完成,停止。 这种方法只能用传输文本文件,有个文件结束符,二进制文件不行。

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


- 千里孤行

4,391

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧