关于recv返回值的问题,困扰已久

chengjiacj 2008-10-18 06:14:17
写了一个客户端和服务器端程序,之间用TCP协议,数据包只传送一次
客户端connect到服务器上,recv数据,但返回值总是为0,但经检查客户端已接收到数据,为什么返回值不是接收到的数据长度?返回值为0是代表服务器端已经断开连接,
但服务器端此时并没有调用close函数,因为我使用了一个死循环让服务器端不关闭socket。
后来做了个测试,服务器端不调用send发送数据,客户端调用recv函数,立即返回0,哪位知道这是什么原因啊?
...全文
479 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedHat_net 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hunterljm 的回复:]
嗯..我对这个题目有些疑问..也可能是我没理解清楚..
楼主说服务器不调用send发送数据,那客户端已经接收到的数据是怎么来的,会不会是你的服务器发送方这边发送了问题呢?
[/Quote]

是啊,又同样的疑惑啊!!没又发送数据,客户端居然能收到??哪来的数据呢?
hunterljm 2008-10-21
  • 打赏
  • 举报
回复
嗯..我对这个题目有些疑问..也可能是我没理解清楚..
楼主说服务器不调用send发送数据,那客户端已经接收到的数据是怎么来的,会不会是你的服务器发送方这边发送了问题呢?
ACuke 2008-10-21
  • 打赏
  • 举报
回复
非阻塞方式?
aled6825 2008-10-19
  • 打赏
  • 举报
回复
你的Flag怎么设定的,若上一条是Peek到空消息,那么它将不会在消息队列中删除,可以先处理掉空消息再接收.
if(recv(sListener,MsgBuff,256,MSG_PEEK)<=0) return 1;
iMsgLen = recvfrom(sListener,MsgBuff,256,0,(SOCKADDR*)&saReceive,&iSALen);
chengjiacj 2008-10-18
  • 打赏
  • 举报
回复
我是将接收到的数据打印出来了
不好意思,我使用linux的,发错地方了,不过原理应该差不多吧
没有错误返回
野男孩 2008-10-18
  • 打赏
  • 举报
回复
WSAGetLastError()看看原因。
ok208043624 2008-10-18
  • 打赏
  • 举报
回复
你是怎么检查到客户端已经收到数据了?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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