栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

TCP

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

UDP

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

UDP服务器流程

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

server端
fd = socket(AF_INET, STREAM, 0);	STREAM 改为 SOCK_DGRAM --- 报式协议。
bind(); 绑定端口 ip
listen();  --- 可有可无
while(1){
//这里不需要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需要指定接收方的地址结构

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号