★UDP套接字

服务器:①创建套接字socket();②绑定bind();③udp收发:recvfrom,sendto(TCP中的收发可以当成文件用read、write完成;UDP必须将数据报完整收回)。

☆udp_server.c

☆udp_client.c

☆程序中使用到的socket API有:

<1>recvfrom

src_addr是一个传出参数,recvfrom()返回时传出客户端的地址和端口号。addrlen参数是一个传入传出参数,传入的是调用者提供的缓冲区src_addr 的长度以避免缓冲区溢出问题,传出的是客户端地址结构体的实际长度。

<2>sendto

☆首先运行server,然后运行client,client向server发送消息,server收到消息:

★提高UDP的可靠性

UDP的传输效率比TCP更高一些,其在网络中交互时具有更小的延时,因为其一,发送方只要把应用字段全部交给网络层处理就行了,接收方不需要确认发送方发送的数据,发送方也没有等待接收方确认报文这些过程;其二,TCP报头一般20个字节,UDP报头只有8字节,因此UDP跟TCP相比,在同长度的IP报文中能够承载更多的有效应用数据。
       很多应用设计者和开发者正是看中了UDP的这种特性,将他们的应用程序利用UDP来实现端对端的数据交互,但是UDP不可靠,它没有TCP的确认、重传、窗口、保活等机制,那么基于UDP的应用如何保证其应用数据在交互过程的可靠性呢?答案是由基于UDP的应用程序来完成。
        目前有如下开源程序利用UDP实现了可靠的数据传输。分别为RUDP、RTP、UDT。
       ☆RUDP
       RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为。
       ☆RTP
       实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。
       RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程。 RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性。 RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。
       ☆UDT
       基于UDP的数据传输协议(UDP-basedData Transfer Protocol,简称UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。顾名思义,UDT建于UDP之上,并引入新的拥塞控制和数据可靠性控制机制。UDT是面向连接的双向的应用层协议。它同时支持可靠的数据流传输和部分可靠的数据报传输。由于UDT完全在UDP上实现,它也可以应用在除了高速数据传输之外的其它应用领域,例如点到点技术(P2P),防火墙穿透,多媒体数据传输等等。

UDP套接字编程以及提高UDP可靠性的方法相关推荐

  1. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  2. C++网络编程(二):UDP套接字编程

    目录 基本特点 流程 基于UDP的数据I/O函数 UDP客户端套接字的地址分配 UDP套接字的数据边界 未连接UDP套接字.已连接UDP套接字 创建已连接UDP套接字 代码示例 参考资料 基本特点 U ...

  3. Linux IPv6 UDP套接字编程示例

    udp ipv6套接字编程和ipv4接口类似,参数略有不同,流程都包括创建套接字.绑定地址.发送等. 下面是一个udp ipv6 demo, 包括创建ipv6套接字.绑定地址和发送数据等. 首先先在l ...

  4. linux udp套接字编程获取报文源地址和源端口(二)

    之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...

  5. TCP和UDP套接字编程

    一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...

  6. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  7. UDP套接字编程——Python语言描述

    首先,回顾一下.在我们使用Socket编程之前的一些网络的概念. IP:它是用来标识处于Internet之中的端系统的. MAC:它是用于在同一局域网中标识不同的计算机的. 端口号:它是用来标识同一台 ...

  8. JAVA UDP套接字编程

    JAVA UDP套接字编程 UDP套接字 无连接 非可靠传输 面向数据报 package com.lius.udp;import java.io.IOException; import java.ne ...

  9. 《网络编程》基本 UDP 套接字编程

    在前面文章中介绍了<UDP 协议>和<套接字数据传输>.UDP 协议和 TCP 协议不同,它是一种面向无连接.不可靠的传输层协议.在基于 UDP 套接字编程中,数据传输可用函数 ...

最新文章

  1. Java api 入门教程 之 JAVA的IO处理
  2. ​2012年至今,细数深度学习领域这些年取得的经典成果!
  3. NanoPi NEO Air使用十六:使用python做开发
  4. 微软VSTS的新功能:WebTest要点
  5. 《滚动数组》---滚动数组思想,运用在动态规划当中
  6. java servlet上传centos服务器
  7. mysql同步大师_数据库大师成长日记:您最需要了解的NoSQL非关系型数据库
  8. 选择大公司还是小公司
  9. hive函数大全:11大类、109个函数
  10. cas server php下载,关于用CAS Server与Php、Jetty配置实现SSO#4
  11. Linux 修改用户名的主目录 家目录
  12. python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图
  13. php include的路径问题,php7中include有相对路径无法打开
  14. Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录
  15. python程序员工资-被Python程序员高工资惊到!报告却显示Python热度降了?
  16. Android仿微信源码下载
  17. 百度网盘解压显示服务器错误,百度网盘、Winrar等解压文件解压出错怎么办?
  18. PostMan——安装使用教程(图文详解)
  19. 魔百和CM311-1a YST代工 YS(M),短接线刷时必须用风扇吹降温,才能刷机成功
  20. 手写汉字识别数据集的预处理

热门文章

  1. 50道编程小题目之【判断是一年的第几天】
  2. mysql 连接字符集_MySQL字符集详解
  3. 系统工程理论与实践投稿经验_钱学森的系统工程 | 如是读
  4. vscode下的好用插件收集
  5. python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...
  6. 人民币金额小写转大写
  7. 【BZOJ 1222】 [HNOI2001] 产品加工(DP)
  8. Java并发性和多线程介绍
  9. 用自定义的form表单对jqgrid数据进行检索查询
  10. isKindOfClass vs isMemberOfClass