六、基于UDP的服务器端/客户端

一、实现基于UDP的服务器端/客户端

1.1 UDP中的服务器端和客户端没有连接

UDP服务器端/客户端不像TCP那样在连接状态下交换数据,因此与TCP不同,无需经过连接过程。也就是说,不必调用TCP连接过程中调用的listen函数和accept函数。UDP中只有创建套接字的过程和数据交换过程。

1.2 UDP服务器端和客户端均只需一个套接字

TCP中,套接字之间应该是-对- -的关系。若要向10个客户端提供服务,则除了守门的服务器套接字外,还需要10个服务器端套接字。但在UDP中,不管是服务器端还是客户端都只需要1个套接字。如图6-2所示:

在这里插入图片描述
图6-2展示了1个UDP套接字与2个不同主机交换数据的过程。也就是说,只需1个UDP套接字就能和多台主机通信。

1.3 基于UDP的数据I/O函数

创建好TCP套接字后,传输数据时无需再添加地址信息。因为TCP套接字将保持与对方套接字的连接。换言之,TCP套接字知道目标地址信息。但UDP套接字不会保持连接状态( UDP套接字只有简单的邮筒功能),因此每次传输数据都要添加目标地址信息。这相当于寄信前在信件中填写地址。接下来介绍填写地址并传输数据时调用的UDP相关丽数。

#include<sys/socket.h>

ssize_t sendto(int sock, void *buff, size_t nbytes,
				int flags, struct sockaddr *to, socklen_t addrlen);

成功时返回传输的字节数,失败时返回-1

  • sock:用于传输数据的UDP套接字文件描述符
  • buff:保存待传输数据的缓冲地址值
  • nbytes:待传输的数据长度,以字节为单位
  • flags:可选项参数,若没有则传递0
  • to:存有目标地址信息的sockaddr结构体变量的地址值
  • addrlen:传递给参数to的地址值结构体变量长度

上述丽数与之前的TCP输出丽数最大的区别在于,此丽数需要向它传递目标地址信息。接下来介绍接收UDP数据的函数。UDP数据的发送端并不固定,因此该函数定义为可接收发送端信息的形式,也就是将同时返回UDP数据包中的发送端信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值