UDP 套接字编程入门

在使用TCP编写的应用程序和使用UDP编写的应用程序之间存在一些本质差异,其原因在于这两个传输层之间的差别:UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。从资源的角度来看,相对来说UDP套接字开销较小,因为不需要维持网络连接,而且因为无需花费时间来连接连接,所以UDP套接字的速度也较快。
因为UDP提供的是不可靠服务,所以数据可能会丢失。如果数据对于我们来说非常重要,就需要小心编写UDP客户程序,以检查错误并在必要时重传。实际上,UDP套接字在局域网中是非常可靠的。

UDP 客户 / 服务器程序使用的套接字函数
图:UDP 客户 / 服务器程序使用的套接字函数

上图展示了客户与服务器使用UDP套接字进行通信的过程。在UDP套接字程序中,客户不需要与服务器建立连接,而只管直接使用sendto函数给服务器发送数据报。同样的,服务器不需要接受来自客户的连接,而只管调用recvfrom函数,等待来自某个客户的数据到达。

如何编写UDP套接字程序

编写UDP套接字应用程序,涉及一定的步骤:

  • 创建套接字
  • 命名套接字
  • 在服务器端,等待客户的消息
  • 在客户端,发送客户消息
  • 关闭套接字

步骤1:创建套接字

可以使用系统调用socket来创建一个套接字并返回该套接字的文件描述符。

#include <sys/socket.h>
int socket(int domain, int type, int protocol);
 
 
  • 1
  • 2
  • 1
  • 2

创建的套接字是一条通信线路的一个端点。

domain
domain参数指定哪种协议族,常见的协议族包括 AF_UNIX 和 AF_INET。AF_UNIX 用于通过文件系统实现的本地套接字,AF_INET 用于网络套接字。

type
type参数指定这个套接字的通信类型,取值包括 SOCK_STREAM 和 SOCK_DGRAM。
SOCK_STREAM 即流套接字,基于 TCP,提供可靠,有序的服务。
SOCK_DGRAM 即数据报套接字,基于 UDP,提供不可靠,无序的服务。SOCK_DGRAM 类型的套接字为本文讲述的重点。

protocol
protocol允许为套接字指定一种协议。对于 AF_UNIX 和 AF_INET,我们使用默认值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值