网络编程基础(三)UDP
2017-11-22 23:52
253 查看
网络编程基础(UDP 编程)
UDP 报文头部结构如下图所示:
TCP 流式服务和 UDP 数据包服务
TCP 字节流服务中,应用程序对数据的发送和接受是没有边界限制的。UDP 则不然,发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报并发送之。接收端必须及时针对每一个 UDP 数据报执行读操作(通过 recvfrom 系统调用),否则就会丢包(这经常发生在较慢的服务器上)。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。
UDP 编程流程:
服务器:socket bind recvfrom/sendto close
客户端:socket recvfrom/sendto close
int recvfrom(int sockfd, void *buff, int len, int flag, struct sockaddr *src_addr, int *addr_len); //接受一个数据报并保存源地址
sockfd:标识一个已连接套接口的描述符
buff:接收数据缓冲区
len:缓冲区的长度
flags:调用操作方式
MSG_PEEK:查看当前数据,数据将被复制到缓冲区中,但并不从输入队列中删除
MSG_OOB:处理外带数据
src_addr:(可选)指针,指向装有原地址的缓冲区
addr_len:(可选)指针,指向 src_addr 缓冲区长度值
返回值:若无错误发生,recvfrom() 返回读入的字节数。如果连接已中止,返回 0。否则的话,返回 SOCKET_ERROR 错误,应用程序通过 WSAGetLastError() 获取相应错误代码。
int sendto(int sockfd, void *buff, int len, int flag, struct sockaddr *src_addr, int addr_len); //向指定目的地发送数据
sockfd:一个标识套接口的描述符
buff:包含待发送数据的缓冲区
len :buff 缓冲区中的数据的长度
flags:调用方式标志位
MSG_DONTROUTE
MSG_OOB:发送外带数据(仅适用于 SO_STREAM)
src_addr:(可选)指针,指向目的套接口的地址
addr_len:src_addr 所指向地址的长度
返回值:若无错误发生,send() 返回所发送数据的总数。否则的话,返回 SOCKET_ERROR 错误,应用程序可通过 WSAGetLastError() 获取响应错误代码。
UDP 报文头部结构如下图所示:
TCP 流式服务和 UDP 数据包服务
TCP 字节流服务中,应用程序对数据的发送和接受是没有边界限制的。UDP 则不然,发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报并发送之。接收端必须及时针对每一个 UDP 数据报执行读操作(通过 recvfrom 系统调用),否则就会丢包(这经常发生在较慢的服务器上)。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。
UDP 编程流程:
服务器:socket bind recvfrom/sendto close
客户端:socket recvfrom/sendto close
int recvfrom(int sockfd, void *buff, int len, int flag, struct sockaddr *src_addr, int *addr_len); //接受一个数据报并保存源地址
sockfd:标识一个已连接套接口的描述符
buff:接收数据缓冲区
len:缓冲区的长度
flags:调用操作方式
MSG_PEEK:查看当前数据,数据将被复制到缓冲区中,但并不从输入队列中删除
MSG_OOB:处理外带数据
src_addr:(可选)指针,指向装有原地址的缓冲区
addr_len:(可选)指针,指向 src_addr 缓冲区长度值
返回值:若无错误发生,recvfrom() 返回读入的字节数。如果连接已中止,返回 0。否则的话,返回 SOCKET_ERROR 错误,应用程序通过 WSAGetLastError() 获取相应错误代码。
int sendto(int sockfd, void *buff, int len, int flag, struct sockaddr *src_addr, int addr_len); //向指定目的地发送数据
sockfd:一个标识套接口的描述符
buff:包含待发送数据的缓冲区
len :buff 缓冲区中的数据的长度
flags:调用方式标志位
MSG_DONTROUTE
MSG_OOB:发送外带数据(仅适用于 SO_STREAM)
src_addr:(可选)指针,指向目的套接口的地址
addr_len:src_addr 所指向地址的长度
返回值:若无错误发生,send() 返回所发送数据的总数。否则的话,返回 SOCKET_ERROR 错误,应用程序可通过 WSAGetLastError() 获取响应错误代码。
相关文章推荐
- 网络编程的基础知识 TCP、UDP 学习日记
- 黑马程序员--java基础--网络编程(UDP和TCP)
- 应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题
- Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据
- java网络编程基础——UDP通信之DatagramSocket
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- Java笔记二十三.网络编程基础与UDP编程
- Java基础 网络编程 Socket UDP TCP URL
- 网络编程基础(1)-协议概要-IP、ICMP、UDP
- Unix高级编程:网络基础、基于TCP以及UDP的编程模型、TCP高并发编程模型
- 网络编程基础(2)----------UDP客户端与服务器
- 黑马程序员_java基础(12)网络编程之UDP
- 第10章 网络编程 01_网络基础_IP_TCP_UDP.wmv
- 网络编程-UDP程序实例(基础)
- 黑马程序员——Java基础---网络编程(UDP编程)
- Java基础-网络编程之UDP编程
- Java基础---网络编程 ip udp
- Java基础23天--05--网络编程(TCP和UDP)
- 黑马程序员_毕向东JAVA基础_网络编程(概述&UDP&TCP)
- Linux网络编程基础_5_传输层(中)--UDP协议