linux网络编程-C/S模型-UDP服务器

本文对比了TCP和UDP两种网络传输协议,详细阐述了TCP的面向连接、可靠性和适用场景(如大数据传输),以及UDP的无连接、高效性及其在实时应用(如游戏、视频会议)中的使用。介绍了UDP服务器和客户端的基本操作,并讨论了它们的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP

TCP: 面向连接的,可靠数据包传输。对于不稳定的网络层,采取完全弥补的通信方式。 丢包重传。
优点:稳定。数据流量稳定、速度稳定、顺序
缺点:传输速度慢。相率低。开销大
使用场景:数据的完整型要求较高,不追求效率。大数据传输、文件传输。

UDP

UDP: 无连接的,不可靠的数据报传递。对于不稳定的网络层,采取完全不弥补的通信方式。 默认还原网络状况
优点: 传输速度块。相率高。开销小。
缺点:不稳定。数据流量。速度。顺序。
使用场景:对时效性要求较高场合。稳定性其次。 游戏、视频会议、视频电话。腾讯、华为、阿里 — 应用层数据校验协议,弥补udp的不足。

UDP服务器流程

在这里插入图片描述

UDP没有三次握手过程,因此连接建立方不需要connect(),接受方不需要accpet()
下面的recvfrom函数有传出地址结构的作用

server端

fd = socket(AF_INET, STREAM, 0);	STREAM 改为 SOCK_DGRAM --- 报式协议。
bind(); 绑定端口 ip
listen();  --- 可有可无
while1{
//这里不需要accept,那么read函数不知道用哪个cfd,所以直接用recvfrom函数
  read(cfd, buf, sizeof) --- 被替换 --- recvfrom() --- 涵盖accept传出地址结构。
  小-- 大转换
  write();--- 被替换 --- sendto()---- connect
  }
  close(); 

client端

  
  connfd = socket(AF_INET, SOCK_DGRAM, 0);
  //由于不需要connect函数 但是也需要给要发送的服务器ip地址
  sendto(‘服务器的地址结构’, 地址结构大小)
  //收到信息
  recvfrom()
  写到屏幕
  close();

recvfrom函数

接收一个数据报并保存源地址
有两种模式,阻塞和非阻塞,可以通过ioctl函数来设置。阻塞模式是一直等待直到有数据到达,非阻塞模式是立即返回

ssize_t recvfrom(int sockfd, void *buf, size_t len,
      int flags,struct sockaddr *src_addr, socklen_t *addrlen);

    sockfd: 套接字
    buf:缓冲区地址
	len:缓冲区大小
	flags: 0
	src_addr:(struct sockaddr *&addr 传出。 对端地址结构
	addrlen:传入传出。
	返回值: 成功接收数据字节数。 失败:-1 errn。 0: 对端关闭。

sendto函数


 ssize_t sendto(int sockfd, const void *buf, size_t len, 
 int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
 
  sockfd: 套接字
  buf:存储数据的缓冲区
  len:数据长度
  flags: 0
  src_addr:(struct sockaddr *&addr 传入。 目标地址结构
  addrlen:地址结构长度。
  返回值:成功写出数据字节数。 失败 -1, errno		

在这里插入图片描述
在这里插入图片描述

总结

对于server:
创建一个udp的socket
socket绑定本地ip和端口
recvfrom对这个socket 获得发来的信息和发送方的地址结构
sendto 对这个socket 获得本地的地址信息并根据对方的地址结构发送数据

对于client
创建一个udp的socket
创建接收方的地址结构
可以绑定socket和接收方的地址结构,也可以不绑
都会在sendto那里隐式绑定,sendto需要指定接收方的地址结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值