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

高分求解linux socket通信 UDP丢包问题

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

    本文导语:  最近在做一个项目,在这之前,做了个验证程序. 发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象. 纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了. 有没有成熟的解决方案来...

最近在做一个项目,在这之前,做了个验证程序.
发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象.
纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了.

有没有成熟的解决方案来解决这个问题.
我用过sleep(1),暂时解决这个问题,但是这不是根本解决办法,如果数据量大而多,网络情况不太好的话,还是有可能丢失.

希望大俠帮帮忙啊!

|
有两种方法解决楼主的问题:
方法一:重新设计一下协议,增加接收确认超时重发。(推荐)
方法二:在接收方,将通信和处理分开,增加个应用缓冲区;如果有需要增加接收socket的系统缓冲区。(本方法不能从根本解决问题,只能改善)

|
网络丢包,是再正常不过的了。
既然用UDP,就要接受丢包的现实,否则请用TCP。
如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP(当然是部分和有限的简单实现)。

|
采用回包机制,每个发包必须收到回包后再发下一个

|
丢包的原因我想并不是“服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了”,而是服务器端的socket接收缓存满了(udp没有流量控制,因此发送速度比接收速度快,很容易出现这种情况),然后系统就会将后来收到的包丢弃。你可以尝试用setsockopt()将接收缓存(SO_RCVBUF)加大看看能不能解决问题。

|
可以采用回包机制,但处理起来还是比较麻烦....服务器端可以加一个判断对数据是否接收进行重发.
但是我个人感觉LZ可以试试楼上所说用多线程去处理一下试试..

|
UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。

要实现文件的可靠传输,就必须在上层对数据丢包和乱序作特殊处理,必须要有要有丢包重发机制和超时机制。

常见的可靠传输算法有模拟TCP协议,重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议等等。

如果只是小规模程序,也可以自己实现丢包处理,原理基本上就是给文件分块,每个数据包的头部添加一个唯一标识序号的ID值,当接收的包头部ID不是期望中的ID号,则判定丢包,将丢包ID发回服务端,服务器端接到丢包响应则重发丢失的数据包。

模拟TCP协议也相对简单,3次握手的思想对丢包处理很有帮助。

|
udp是不安全的,如果不加任何控制,不仅会丢失包,还可能收到包的顺序和发送包的顺序不一样。这个必须在自己程序中加以控制才行。
收到包后,要返回一个应答,如果发送端在一定时间内没有收到应答,则要重发。

|
UDP本就是不可靠连接,不能保证不丢包
UDP丢包除了上面说的,网络路由也有可能会发生丢包现象,TTL为0的时候这个包就会被丢弃,而不会给发送者任何信息,而TCP在这种情况下是有回复的。

    
 
 

您可能感兴趣的文章:

  • 高分求解---如何在DOS下查杀欢乐时光病毒?用哪种杀毒软件?Windows98没法进入了!
  • 简单问题,高分求解
  • 各位大侠,高分求解
  • 高分求解,一定给分!!!!
  • 高分求解jbuilder5 运行自带的jsp范例出错的问题?
  • 高分求解,不够再加
  • ################高分求解!!!!,关注有分!!!!
  • 哪里能够下载到针对InterBase的第三类的JDBC驱动程序InterClient?高分求解......
  • jsp 里面的 特殊字符“单引号”“双引号”的替换??(高分求解)
  • linux上的媒体播放(高分在线求解)
  • 调试JSP遇到的问题,高分求解
  • 高分求解:win2000访问linux
  • 高分求解 - TOMCAT中的内存泄漏问题……
  • 通讯行业里的OSS(网管)系统是什么样系统啊?干什么用的?高分求解
  • 急急急!!!高分求解linux 2.6 内核安装网卡的问题
  • 【NFS问题暴高分求解】如何知道Server端有哪些目录共享?
  • 高分求解,信号捕获
  • 三个容易bash脚本,高分求解
  • 高分求解?????一定给分
  • 从交换机分出来的机器的ip地址问题(高分求解)
  • Unix下进程间通信有那些比较常用的方法,谁有经验?高分奉送!
  • 高分问linux串口和windows通信问题
  • 请问:jsp 和 applet怎样通信/? 问题解决给高分!!!!!!!!!!!!!!
  • 高分解决LINUX串口通信错误,在线等待
  • 高分请教,applet和javabean之间如何通信?
  • 高分求助:内核模块编程中如何实现网络通信
  • !!!Linux下如何实现Modem的点对点拨号串口通信? 高分赠送加衷心感谢.
  • 单服务器端多客户端的通信问题 --高分请教!!!
  • 在线——高分求救,关于APPLET与SERVLET的通信
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


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

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

    浙ICP备11055608号-3