当前位置: 首页 > news >正文

linux网络编程之UDP编程

linux网络编程之UDP编程

  • UDP编程模型
      • 服务端
      • 客户端
    • tcp与udp的区别

UDP编程模型

服务端

1.创建socket
2.构建服务器协议地址簇
3.绑定
4. 通信

sendto(多了两个参数) == send + connect

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>int main(){//1. 创建socket 		int serverFd = socket(AF_INET,SOCK_DGRAM,0);if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);printf("创建socket成功!\n");				//2. 构建服务器协议地址族	struct sockaddr_in  addr = {0};addr.sin_family =   AF_INET;//和socket函数第一个参数一致addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型addr.sin_port = htons(9999);//端口号			//3. 绑定int r = bind(serverFd,(struct sockaddr*)&addr,sizeof addr);if(-1  ==  r) printf("绑定失败:%m\n"),close(serverFd),exit(-1);printf("绑定成功!\n");	//4. 通信char buff[256];//用来存储客户端协议地址族struct sockaddr_in  cAddr = {0};int cLen = sizeof cAddr;while(1){r = recvfrom(serverFd,buff,255,0,(struct sockaddr*)&cAddr,&cLen);//和read一样if(r>0){buff[r] = 0;//添加'\0'printf("客户端%s发来的数据>>%s\n",inet_ntoa(cAddr.sin_addr),buff);sendto(serverFd,"妖怪,吃俺老孙一棒",strlen("妖怪,吃俺老孙一棒"),0,(struct sockaddr*)&cAddr,sizeof cAddr);}}}

客户端

1.创建socket
2.获取服务器协议地址簇
3,通信
recvform(多了两个参数) == recv + accept

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>int main(){//1. 创建socket 		int serverFd = socket(AF_INET,SOCK_DGRAM,0);if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);printf("创建socket成功!\n");				//2. 构建服务器协议地址族	struct sockaddr_in  addr = {0};addr.sin_family =   AF_INET;//和socket函数第一个参数一致addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型addr.sin_port = htons(9999);//端口号			//3. 通信char buff[256];int r;char temp[256];int len = sizeof addr;while(1){memset(buff,0,256);printf("请输入>>");scanf("%s",buff);r = sendto(serverFd,buff,strlen(buff),0,(struct sockaddr*)&addr,sizeof addr);printf("r:%d\n",r);r = recvfrom(serverFd,temp,255,0,(struct sockaddr*)&addr,&len);if(r > 0){temp[r] = 0;printf("服务器说:%s\n",temp);}}}

tcp与udp的区别

1.tcp有连接 udp没有连接
2.tcp数据流, udp数据报文
3. tcp 数据有边界 , udp数据无边界
4. tcp数据有序, udp数据无序
5.tcp安全 稳定 可靠 udp不安全
安全: 相对不容易被窃取
稳定:传输速率变化
可靠:是否一定能收到
6. tcp相对慢很多,udp传输速度快
7.tcp有中心(服务器) udp没有

http://www.lryc.cn/news/242604.html

相关文章:

  • YB4556 28V、1A、单节、线性锂电池充电IC
  • 基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)
  • 【ChatGLM3-6B】Docker下部署及微调
  • 编程常见报错信息及解决方案汇总
  • 从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题
  • 0001Java程序设计-springboot基于微信小程序批发零售业商品管理系统
  • 中国防锈油市场深度调研与投资战略报告(2023版)
  • Linux C 基于tcp和epoll在线聊天室
  • 为什么要隐藏id地址?使用IP代理技术可以实现吗?
  • 前端(HTML + CSS + JS)
  • 12 要素 12 Factor
  • 十大排序之冒泡排序与快速排序(详解)
  • 【SpringBoot篇】阿里云OSS—存储文件的利器
  • Leetcode—58.最后一个单词的长度【简单】
  • Apach Ozone部署
  • 【nlp】3.2 Transformer论文复现:1. 输入部分(文本嵌入层和位置编码器)
  • 自动化部署 / 扩容openGauss —— Ansible for openGauss
  • Go 实现网络代理
  • Redis报错:JedisConnectionException: Could not get a resource from the pool
  • 【广州华锐互动】Web3D云展编辑器能为展览行业带来哪些便利?
  • Vue项目实战之一----实现分类弹框效果
  • Vue解析器
  • Spring Cloud 版本升级遇坑记:OpenFeignClient与Gateway的恩怨情仇
  • 面试:Docker相关问题
  • 移动端浏览器 jquery 获取 pdf blob文件流 预览pdf
  • Redis并发问题解决方案
  • 读取两个文件夹里不同名的文件,处理映射不对应的文件
  • SpringCloud原理-OpenFeign篇(四、请求原理)
  • 什么是工业物联网(IOT)?这样的IOT平台你需要吗?——青创智通
  • MTK Pump Express 快速充电原理分析