网络编程——6. 基于UDP的服务器端/客户端

本文介绍了UDP套接字的特点,包括其不可靠传输的性质和与TCP的主要差异。在UDP中,服务器端和客户端无需建立连接即可交换数据,且仅需一个套接字。此外,文章详细阐述了基于UDP的数据IO函数,强调每次数据传输都需要指定目标地址。最后,提到了基于UDP的回声服务器端和客户端的实现,并讨论了UDP客户端套接字的地址分配情况。
摘要由CSDN通过智能技术生成

6.1 理解UDP

UDP套接字的特点

跟寄信一样,我写好名字和地址,贴上邮票寄出去就好了。
邮寄过程的丢失或者损坏我都没办法保证,是一种不可靠的传输方式。但相比TCP,虽然可靠性差一些,但比TCP简洁一些,速度也更快一些(在每次交换的数据量越小的情况下)。

TCP和UDP的差异只在于流控制机制:TCP在不可靠的IP层进行流控制,而UDP缺少这种流控制机制。



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

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

与TCP不同,无需经过连接过程即可交换数据
(UDP中只有创建套接字过程数据交换过程

UDP服务器端和客户端都只需1个套接字

TCP中,套接字之间是1对1的关系。若要向10个客户端提供服务,除了守门的服务器套接字外,还需要10个服务器端套接字

把邮筒比作套接字,只要附近有1个邮筒,就能通过它向任意地址寄出信件。
也就是说,只要1个UDP套接字就能向任意主机传输数据。

在这里插入图片描述

基于UDP的数据IO函数

创建好TCP套接字后,传输数据时就不用再添加地址信息。因为TCP套接字将保持与对方套接字的连接。

UDP套接字不会保持连接状态,因此每次传输数据都需要添加目标地址信息(相当于寄信前在信件中填地址)

可以看到,sendto函数与TCP输出函数的最大区别在于,此函数需要向它传递目标地址信息。
在这里插入图片描述
在这里插入图片描述
上述就是UDP程序最核心的部分。

基于UDP的回声服务器端/客户端

UDP不同于TCP,不存在请求连接和受理过程,因此在某种意义上没办法去明确区分服务器端和客户端。

1)服务器端
// uecho_server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 	30

void error_handling(char *message);

int main(int argc, char *argv[]){
   
	int serv_sock;
	char message[BUF_SIZE];
	int str_len;
	struct sockaddr_in serv_adr;
	struct sockaddr_in clnt_adr;
	socklen_t clnt_addr_sz;
	
	if(argc != 2){
   
		printf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值