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

liunux socket 接受数据有大小限制么?

    来源: 互联网  发布时间:2015-10-25

    本文导语:  各大侠:    俺有一个在linux下socket客户程序,访问别人滴服务后, 给俺传过来业务数据<    今天突然传了个量较大的<    我的缓冲区20k ,却只能收到2896字节 ,有哪位大侠知道...

各大侠:
   俺有一个在linux下socket客户程序,访问别人滴服务后,
给俺传过来业务数据<
   今天突然传了个量较大的<
   我的缓冲区20k ,却只能收到2896字节 ,有哪位大侠知道请帮下忙,谢谢
   socket类型
socket(AF_INET,SOCK_STREAM,0))

      有人怀疑是linux 防火墙的问题,我用setup把它关了还这样,55

|
从socket读最好用循环:

int read_done = 0;
while (read_done == 0) {
  read
  if(得到结束标志)  exit
}

那个结束标志可以是自己定义的字符,也可以是达到字节数,或者对方关闭socket(此时read返回-1)

|
如果你的输出数据大于输出缓冲区的最大值,那么数据包会被分成多次发送。

|
TCP一次收不全就反复调用recv呗

|
一次读取的数据量跟本机socket缓冲有关,一次写的数据量跟对端socket缓冲有关。

有时候读写失败(read、write返回值-1)并不一定就是出错了,可能只是对方缓冲满了,这样的话就需要继续读写。(可以判断read、write返回后的错误代码,一般可能是EAGAIN、EINTR之类的)

|
多读几次,直到读到指定大小或者结束标志为止。

|
recv有收到数据的长度,反复收直到收到的数据到你需求的长度就可以了
注意反复收的时候要修改buffer的指针位置

|
把你的读代码贴出来

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • liunux安装问题
  • 怎么才能删除红旗liunux的登陆界面(高分求助)
  • liunux c 程序 异常卡死
  • liunux 问题


  • 站内导航:


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

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

    浙ICP备11055608号-3