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

recv的问题~

    来源: 互联网  发布时间:2016-08-02

    本文导语:  如果我在一台机器上每次send()1000个字节,在另一台机器上想每次recv()1000个字节,该怎么做? 现在遇到的情况是:我每次send()大约1000个字节左右数据(字节数是动态的,可能1000多点,也可能少点),想在另一台...

如果我在一台机器上每次send()1000个字节,在另一台机器上想每次recv()1000个字节,该怎么做?

现在遇到的情况是:我每次send()大约1000个字节左右数据(字节数是动态的,可能1000多点,也可能少点),想在另一台机器上recv()这一千字节的数据,解析后再处理。但是recv()的返回值与send()发送的字节数不一样,比如我send()1000字节的数据,但是recv却返回2000。如何才能准确取出每次send()的值?

谢谢各位高手前来解答~

我是菜鸟~勿鄙视~

|
这个没办法实现的...

首先无论是send()还是recv()的过程都是,先写到高速缓存里面去,然后由系统的守护进程,每隔一段时间执

行一次刷新操作,将高速缓存中的脏页写到指定的描述符上去,比如磁盘文件,比如socket。所以当send() 

1000字节的数据,并且即使send()成功了,也不能保证这1000字节的数据就一次性的写到了socket描述符

中去。或者对端就一次收到这1000字节。

其次,由于TCP是面向字节流的协议,而不是像UDP,SCTP那样的数据包协议,在socket上传送的时候,

都是比特流。所以你这1000字节在底层到底怎么传送,也不确定。可能会被拆分成好几部分,也可能打包

到一个更大字节的流中,例如2000字节。

最后,通常这种问题的解决方案是,在recv()那端循环的读socket,因为recv()的返回值是实际读到的字节数

量。那你就在循环里面累加读到的字节数,什么时候读到1000了,循环退出,这样就能完整读取发端发过来

的数据了。

|
send() 1000 bytes/次,没法保证。

 ssize_t recv(int s, void *buf, size_t len, int flags);
recv() 1000 bytes/次,可以通过 flags=MSG_PEEK 参数来先copy而不cut出来,len设置成1000,然后看 ssize_t实际的值,若成功,则再次调用 recv(), flag = 0来取数据。

    
 
 

您可能感兴趣的文章:

  • socket编程:recv(...)函数问题求救
  • 请教soclet中recv()函数最大返回值的问题
  • 关于recv函数的问题
  • 关于socket的send(),recv()的问题.
  • 求助:关于单线程recv时的超时问题
  • 急!嵌入式linux下socket编程,recv()的问题:
  • ##socket编程中send&recv的问题
  • 求救:如何用select解决recv的阻塞问题
  • 关于socket编程的一个难点:recv()函数的返回问题!
  • Connection reset by peer: JVM_recv in socket input stream read这个问题到底怎么解决??
  • linux下网络通信使用接受函数recv()问题?
  • recv的问题
  • linux c socket recv问题
  • 【急问】:关于send()和recv()的问题
  • 专门为难C或unix高手,recv或read之超时问题
  • recv读取套接字返回值问题
  • recv效率低下的问题
  • 问个recv函数的问题
  • 急啊!关于Http recv()接收图像的问题
  • 高分请教socket简单问题:客户端send数据过去,没有反应,recv时候失败。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • recv如何使用?
  • 虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
  • socket编程 是recv阻塞
  • recv在什么情况下会返回0
  • socket tcp 关于 alarm() 和 recv() ?
  • 对recv函数第四个参数置0的疑问
  • linux 网络编程 recv函数
  • linux c recv
  • 请问 : read, 与recv 两个函数有什么区别啊?
  • recv 接收 ,接收空间不够大, 可以通过什么知道?
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • socket中的疑问:read,write和send,recv的区别
  • linux c 网络编程时用 recv 函数
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • socket编程中的函数send和recv如何被信号中断?
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • recv无法接受数据
  • recv返回值大于要得到的大小?
  • solaris socket 非阻塞recv产生 EBADF 错误
  • 为何我windows下面send 成功了。 。。但是linux的recv确返回 0


  • 站内导航:


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

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

    浙ICP备11055608号-3