当前位置:  技术问答>linux和unix

关于socket编程的一个难点:recv()函数的返回问题!

    来源: 互联网  发布时间:2016-11-01

    本文导语:  本帖最后由 fififisher 于 2011-01-06 10:54:23 编辑 在客户端,发送"I love you!",按以下三种办法发送,其中ClientSocket是客户端的套接字描述符: 第一种: string str("I love you!"); send(CientSocket, str.c_str(), str.size(), 0); 第二种...

本帖最后由 fififisher 于 2011-01-06 10:54:23 编辑
在客户端,发送"I love you!",按以下三种办法发送,其中ClientSocket是客户端的套接字描述符:

第一种:
string str("I love you!");
send(CientSocket, str.c_str(), str.size(), 0);


第二种:
string str1("I love");
string str2(" you!");
send(CientSocket, str1.c_str(), str1.size(), 0);
send(CientSocket, str2.c_str(), str2.size(), 0);



第三种:
string str1("I love");
string str2(" you!");
send(CientSocket, str1.c_str(), str1.size(), 0);
sleep(10秒);
send(CientSocket, str2.c_str(), str2.size(), 0);


请问:

服务端的recv()函数,分别返回多少次?

第一种情况,我知道肯定是返回一次。

问题是第二和第三种情况,很难区分。

关键是,我不知道recv()函数返回的条件。即当符合什么条件,recv()函数就会(才会)返回?

|
一般情况下,发送端需要先发送4字节发送缓冲的长度给接收端,这样接收端才好按接收到的长度来接收真正的数据。
另外send()和recv()一般都需要重载一下,因为send()一次返回,可能并不是你真正想发送的长度,recv()一次返回,也可能不是接收到你想接收的长度。google一下,参考代码很多的,也很简单,比如发送1MB的字节,可能第一次返回只发送了20KB,需要你while一下才能全发出去,recv也类似。

    
 
 

您可能感兴趣的文章:

  • php使用socket_bind()函数绑定IP地址
  • 当进程处于socket读阻塞模式中,外部SIGNAL发生,此时信号相应响应函数可否进行socket写?
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • Linux 下用什么函数查找socket上一次的错误?
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 驱动模块中用socket,哪有相关的函数啊??
  • socket编程,使用recvfrom()函数监听问题。
  • socket函数源码
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • 求linux下socket函数手册
  • 关于socket中write()函数的问题
  • 如何知道一个用有没有权限调用bind()函数(socket编程的时候)
  • 请问有没有Linux下SOCKET服务端和客户端的接口函数!!
  • socket send函数疑问,缓冲区
  • linux下socket的send函数阻塞问题?
  • [求助]请问socket编程中send()函数可以发送整形数据吗?
  • socket send()函数错误
  • 编译socket程序需要加什么库函数?
  • socket callback函数问题
  • socket编程:recv(...)函数问题求救
  • 内核源文件/net/socket.c中调用其他模块的函数,该如何实现
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • socket的close是立刻返回,还是等四路握手过程完成再返回
  • java 中 SOCKET 的ACCEPT函数有返回值吗?怎样返回才是正常的?
  • 当close(socket)时,为什么linux下slect不返回而windows下就返回??????????
  • socket编程,使用recvfrom()函数监听问题。 iis7站长之家
  • PF_PACKET,socket返回-1
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • socket send的返回值
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • 请教: read一个socket, read返回需要多长时间?
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • 急问socket编程:程序中执行sendto()返回errno=101是什么原因啊
  • 求助UDP socket sendto返回EHOSTDOWN的问题
  • err=sock->ops->setsockopt(sock, SOL_SOCKET, ...);返回值代表的含义?
  • linux c socket http编程 返回http消息体出错!
  • socket编程accept返回值为0,是否正常?
  • socket关闭后为什么recv不返回
  • (请高手救命啊!在线等)Socket Send的时候,不停的得到EINTR错误返回, 请问是为什么?
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3