linux第9天 UDP
今天学了一点UDP知识,还是IP协议.都不是重点,重点是socket服务器框架
不过还是把今天学的东西,先罗列出来,将来复习的时候方便
q UDP报文可能会丢失、重复
q UDP报文可能会乱序
q UDP缺乏流量控制
udp缓冲区写满以后,没有流量控制机制,会覆盖缓冲区。
q UDP协议数据报文截断
如果接收到的数据报,大于缓冲区;报文可以被截断;后面的部分会丢失。
q recvfrom返回0,不代表连接关闭,因为udp是无连接的。
sendto可以发送数据0包。。。只含有udp头部。
q ICMP异步错误
观察现象:关闭udp服务端,若启动udp客户端,从键盘接受数据后,再发送数据。udp客户端阻塞在sendto位置;
//说明1:udp发送报文的时,只把数据copy到发送缓冲区。在服务器没有起来的情况下,可以发送成功。
说明2:所谓ICMP异步错误是指:发送的报文的时候,没有错误,接受报文recvfrom的时候,回收到ICMP应答
说明3:异步的错误,是无法返回未连接的套接字。udp也可以调用connect
q UDP connect
说明1://udp调用connet,并没有三次握手,只是维护了一个状态信息(和对等方的)。。。
说明2)//一但调用connect,就可以使用send函数
结论:客户端调用connet和不调connet的区别。
1) udp也可以调用connet
2)udp客户端调用了connect以后,不会阻塞在recvfrom函数这里。
3)一但调用connect,就可以使用send函数
4) UDP协议数据报文截断
如果接收到的数据报,大于缓冲区;报文可以被截断;后面的部分会丢失。
实验1
//数据报方式。。。。不是字节流
//如果接受数据时,指定的缓冲区的大小,较小;
//剩余部分将要截断,扔掉
实验2:
sendto可以发送0包,只含头部。
UDP注意点
q UDP报文可能会丢失、重复
q UDP报文可能会乱序
q UDP缺乏流量控制
udp缓冲区写满以后,没有流量控制机制,会覆盖缓冲区。
q UDP协议数据报文截断
如果接收到的数据报,大于缓冲区;报文可以被截断;后面的部分会丢失。
q recvfrom返回0,不代表连接关闭,因为udp是无连接的。
sendto可以发送数据0包。。。只含有udp头部。
q ICMP异步错误
观察现象:关闭udp服务端,若启动udp客户端,从键盘接受数据后,再发送数据。udp客户端阻塞在sendto位置;
//说明1:udp发送报文的时,只把数据copy到发送缓冲区。在服务器没有起来的情况下,可以发送成功。
说明2:所谓ICMP异步错误是指:发送的报文的时候,没有错误,接受报文recvfrom的时候,回收到ICMP应答
说明3:异步的错误,是无法返回未连接的套接字。udp也可以调用connect
q UDP connect
说明1://udp调用connet,并没有三次握手,只是维护了一个状态信息(和对等方的)。。。
说明2)//一但调用connect,就可以使用send函数
linux第9天 UDP的更多相关文章
- Linux学习四:UDP编程(上)
关于UDP和TCP对比优缺,这里就不说了. 使用UDP代码所掉用的函数和用于TCP的函数非常类似,这主要因为套接口库在底层的TCP和UDP的函数上加了一层抽象,通过这层抽象使得编程更容易,但失去了一些 ...
- [转][linux]简单的linux下的tcp/udp
转自:https://blog.csdn.net/cabing2005/article/details/53068880 详细函数以及参数解释请看原链接. windows下的tcp/udp参考:htt ...
- Linux网络编程:UDP实现可靠的文件传输
我们知道,用TCP实现文件传输很简单.相对于TCP,因为UDP是面向无连接.不可靠的传输协议,所以我们需要考虑丢包和后发先至(包的顺序)的问题,所以我们想要实现UDP传输文件,则需要解决这两个问题.方 ...
- Linux网络编程:UDP Socket编程范例
TCP协议提供的是一种可靠的,复杂的,面向连接的数据流(SOCK_STREAM)传输服务,它通过三段式握手过程建立连接.TCP有一种"重传确认"机制,即接收端收到数据后要发出一个肯 ...
- Linux C socket 基于 UDP
/************************************************************************* > File Name: serve ...
- linux网络编程笔记——UDP
目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> ...
- linux下socket编程-UDP
下面是UDP的服务器的代码: /* server.c */ #include <stdio.h> #include <string.h> #include <netine ...
- Linux 网络编程(UDP)
客户端代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/sock ...
- Linux 简单socket实现UDP通信
服务器端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sy ...
随机推荐
- Yii2 捕获错误日志
在技术开发中,捕获程序框架错误,是非常必要的一件事情,我们公司使用Yii2框架,简单说下Yii2的错误捕获处理 Yii2 web应用 1 配置如下 其中errorHandler就是错误处理配置,执行E ...
- 微信内置浏览器UserAgent的判断
需求分析 现在微信火了,很多线上的APP都希望通过分享的URL或直接的URL进行产品宣传(写这篇博文的时候,听说微信下个版本将要屏蔽微信中的URL链接),这些链接都将通过微信内置的浏览器打开.PM希望 ...
- [daily][archlinux][pacman] local database 损坏
下午,开心的看着dpdk的文档,做做各种小实验. 后台正常yaourt -Syu,三个多G的下载,我总是过很久才update一次. 然后KDE窗口各种异常,我知道又在开始更x相关的东西了.可是因为X异 ...
- [dpdk] 读官方文档(1)
前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>. 目标:读官方文档,同时跟着文档进行安装编译等工作. http://dpdk.org/doc/guides/index ...
- 创建QT CREATOR对话框报错 linux QT Creator :-1: error: cannot find -lGL
装完QT5.4 及 QT Creator3.3 后 创建第一个QT Widgets Application(相当于窗体) 应用程序 报如上错误. 执行 sudo apt-get install lib ...
- ubuntu下opencv在Qt中的使用
1. 编译安装OpenCV2.4.9 本博已有文章描述 2. 安装Qt和QtCreator 从qt-project.org 下载Qt安装文件 qt-opensource-linux-x64-5.4. ...
- 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)
最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1. Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2. 使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...
- EF的表连接方法Include()
在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外 ...
- 在HCI层ACL Connection的建立
一.概述 上一篇博文介绍的是inquiry的整个过程中HCI层的command和event.在寻找到有效的远端蓝牙设备后,开始建立ACL连接,这里仅仅反应HCI层的数据包,对于LM层和Base ...
- jquery mobile 方法收集.
1.在列表项和按钮上禁用文本截断 如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white- ...