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

为什么通过socket会丢数据?

    来源: 互联网  发布时间:2015-03-29

    本文导语:  从一个socket server的端口9990接收数据 ,数据量很大,我们客户端接收的数据老收不全,有丢报告的现象,但read和select函数都没有出错。不知什么原因? 尝试过把select的超时时间设大和不设超时,read   设成阻塞和...

从一个socket server的端口9990接收数据 ,数据量很大,我们客户端接收的数据老收不全,有丢报告的现象,但read和select函数都没有出错。不知什么原因?
尝试过把select的超时时间设大和不设超时,read   设成阻塞和非阻塞方式,但都不行,可如果手工telnet到9990端口上收报告,报告却不丢,不知什么原因?
如果不用read改用recv,应该怎么用呀?
代码如下: 



while(1){ 
memset(buf,0x00,sizeof(buf)); 
FD_SET (sock,&readset); 
//FD_ZERO (&readset); 
select_time.tv_sec = 5; 
select_time.tv_usec = 0; 


rc_select = select (sock+1,&readset,NULL,NULL,&select_time); 
if(rc_select == -1){/*select error*/ 
if(errno == EINTR) continue; 
else{ 
log.write(LOG_DEV&LOGFILE_MASK|LOG_TIME|ERROR, 
"%sselect socket reading status failed.n", 
ErrLogStr); 
return -1; 


else if(rc_select==0){/*timeout*/ 
break; 

else if(rc_select > 0){ 
if(FD_ISSET(sock,&readset)){/*ready for reading*/ 
if((rc_read=read(sock,(void *)buf,sizeof(buf)))>0){ 
printf("nget data here...n"); 

else if(rc_read《=){}/* ISSET */ 

} //end while 1

|
把SOCKET的读写窗口和程序中的接收BUFFER改大一些试试看

|
数据量大恐怕要控制一下流量。

    
 
 

您可能感兴趣的文章:

  • php通过pack和unpack函数实现对二进制数据封装及解析
  • 现在java开发中流行通过什么方式实现对数据库操作?就好像Visual Stadio通过ADO访问数据库。
  • 通过套接字捕获数据包,如何捕获大多数(全部)的通过网卡的包,并要求显示MAC地址和IP地址
  • java中的数据库结果集可以被赋值吗,可以通过结果集的方法来更新数据库字段吗?
  • 通过JDBC连接数据库,执行抄作后,关闭了连接,数据服务器端的进程还在,怎麽处理?
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • vc通过socket发送数据给java的问题
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 通过/dev/sda文件取硬盘末尾数据的问题
  • 通过JdbcOdbcDriver连接Access出现“未发现数据源名称并且未指定默认驱动程序”
  • 数据包进入网卡后如何通过TCPIP协议进行发送
  • 通过位图头文件计算BMP的数据大小
  • LINUX下如何通过电话线传输数据
  • 数据包通过dev_queue_xmit发送出去,dev_queue_xmit返回值为0,但是对方收不到数据包 ,本机也抓不到发送出去的包
  • 怎样通过表单将输入的日期取出,并保存到数据库中
  • 通过socket连接一次性发送大数据量的问题
  • 各位老兄好,通过ObjectoutputStream ,ObjectINputStream 如何读写数据
  • 不想通过jdbc-odbc桥,连接数据库,该怎么做?
  • 想法:内存中的数据通过DMA存储到USB-disk中
  • 如何通过servlet提取表单中提交的数据〉如姓名,〉〉.....载线等待,一定给分!!!
  • 大家有多少web application是直接连接数据库的?又有多少是通过weblogic或websphere之类连接的?
  • php通过socket_bind()设置IP地址代码示例
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • kjava能不能通过socket连接服务器
  • linux 下如何图片如何通过socket传输?
  • socket下怎么监控通过主机的所有的包
  • 高分:有那位大大虾知道通过Socket得到服务器的类型,等等
  • 通过socket和asp打交道
  • linux与java如何通过socket传float类型
  • 客户端是linux通过socket编程实现服务器端win平台接收?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • 通过javascript库JQuery实现页面跳转功能代码
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • linux下通过crond实现自动执行程序
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • 通过docker commit命令保存对docker容器的修改
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • 通过docker run命令运行新的docker镜像
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • 通过docker search命令搜索可用docker镜像 iis7站长之家
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Session id实现通过Cookie来传输方法及代码参考
  • Jbuilder第一次编译说缺包,引入通过!然后把原来引入的注释,又通过!上帝,救我!
  • 通过docker search命令搜索可用docker镜像
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • Python3通过request.urlopen实现Web网页图片下载
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • 工作站Redhat Linux7.2如何通过NT4.0 proxy代理服务器上网,我不能通过其验证!请高手指点思路和方法!


  • 站内导航:


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

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

    浙ICP备11055608号-3