第十二章 UDP套接字

12.1 前言

上一章讲述了TCP通信方式,它是基于流的面向连接的网络通信。UDP是IP协议上的另一种传输协议。

TCP和UDP都是端到端的通信协议,都处于TCP/IP网络模型的第三层(传输层)。

它和TCP的区别是:

TCP UDP 解释
基于流 基于报文  
有连接 无连接  
有保障 无保障  
效率低 效率高  
适用稳定传输场合 适合允许报文丢失的场合  

12.2 创建UDP socket

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

12.2 绑定地址

绑定地址和TCP一样

12.3 发送和接收

调用的接口和TCP不一样,行为不同。TCP的发送会发生粘包情况,而UDP不会。TCP发送认为是可靠的,而UDP的发送可能会发生丢失和乱序。

UDP的发送大部分时候使用sendto,因为send函数没有提供目标地址。如果UDP socket调用了connect函数,也可以使用send函数。

12.4 广播和多播(组播)

由于UDP没有连接,所以可以支持广播和多播。

12.5 关闭socket

使用close

注意:

  • UDP也可以调用connect函数,但是connect函数只是让udp socket保存默认的发送地址,以便可以简单的调用send函数来发送数据。

  • UDP的数据是基于报文的,客户端调用一次send,产生一个UDP报文,接收一次只能接收一个报文。

  • 如果recv时,程序提供的缓冲区小于UDP报文长度,那么会导致数据丢失。如何得到数据报文的长度???UDP报文不要超过MTU(1400)

  • 广播时,发送端做额外设置,允许发送广播,接收端还是默认处理接口。允许发送广播socket,也可以接收数据。

  • 组播,发送端不需要额外设置,只需要发送地址改成组播地址即可。接收端加入组。

转载于:https://www.cnblogs.com/w-x-me/p/6412735.html

网络编程 UDP套接字相关推荐

  1. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  2. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  3. Linux网络编程——原始套接字编程

    Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...

  4. python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  5. TCP/IP网络编程:P1->理解网络编程和套接字

    本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...

  6. C# 网络编程之套接字编程基础知识

    最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他 ...

  7. Linux网络编程之套接字基础

    Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...

  8. 01.理解网络编程和套接字

    理解网络编程和套接字 理解网络编程和套接字 网络编程和套接字概要 网络编程就是编写程序使两台连网的计算机相互交换数据.这就是全部内容了吗?是的!网络编程要比想象中简单许多. 那么,这两台计算机之间用什 ...

  9. TCP/IP网络编程——理解网络编程和套接字编程

    完整版文章请参考: TCP/IP网络编程完整版文章 文章目录 一.理解网络编程和套接字编程 1.1 socket套接字 1.1.1 一个例子来表示TCP的网络连接 1.1.2 程序实现 1.2 文件操 ...

最新文章

  1. Python使用matplotlib可视化小提琴图、seaborn中的violinplot函数可视化多分类变量的小提琴图(Violin Plot)
  2. php服务器无法上传图片,IIS+php服务器无法上传图片解决办法_PHP教程
  3. 办公自动化系统开发实例导航 源码_本色世界源码搭建(系统开发)
  4. 帝国cms php点击删除,帝国CMS删除内容非本站链接的方法(非插件)
  5. mysql strcmp s1 s2_mysql常用函数
  6. instanceof_您真的需要instanceof吗?
  7. 最长不下降子序列 (O(nlogn)算法)
  8. SuseLinux详解(3)——开启/关闭防火墙的方法
  9. C# 启动EXE 关闭EXE ProcessStartInfo
  10. 联想服务器没有安装iis组件,win10没有iis怎么安装_手把手教你安装iis的详细步骤...
  11. 侯晓迪:全身心的投入,吃住都在实验室
  12. 中国好SaaS广州站:Fundebug勇夺两大奖项
  13. Sql取得两表关联数据
  14. python将pvr格式转换成pvr.ccz的代码
  15. jetson nano 基础设置
  16. Tableau的用法
  17. 【最新最详细】SQL Server 2019 安装教程{超详细 附网盘下载链接}
  18. java统计图表代码_java swing下用jfreechart开发图表统计情况
  19. css与mdx,mdx、mdd及css三者关系以及欧路中应如何安装css
  20. C++中fstream

热门文章

  1. Node中同步与异步的方式读取文件
  2. Java中对POI的单元格设置背景色
  3. Eclipse新建SpringBoot后pom.xml代码
  4. 写博客一周我有哪些收获
  5. go build 无文件_Go 质量保证:集成测试(1) 用 Docker 执行测试
  6. python中itemgetter函数_Python中的sorted函数以及operator.itemgetter函数
  7. 恭喜 神策数据入选中国信通院开源供应商全景图
  8. linux c语言链表的简单应用之创建链表
  9. 设计模式学习笔记之-代理模式
  10. swift3.0 Runtime 增加属性