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

【C语言】UDP通信

udp使用的是数据报传输。可以一对一,一对多进行传输,用于快速,实时性高的场景

服务器端:
使用步骤:
1.创建socket
2.bind绑定可接收的客户端
3.while{
recv接收数据
send发送数据
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>int main()
{// 创建socketint cfd = socket(AF_INET, SOCK_DGRAM, 0);if (cfd < 0){perror("socket error");return -1;}// 绑定struct sockaddr_in serv;struct sockaddr_in clientsock;bzero(&serv, sizeof(serv));serv.sin_family = AF_INET;serv.sin_port = htons(9999);serv.sin_addr.s_addr = htonl(INADDR_ANY);bind(cfd, (struct sockaddr *)&serv, sizeof(serv));int i;int n;socklen_t len;char buf[1024];while (1){// 读取数据memset(buf, 0x00, sizeof(buf));len = sizeof(clientsock);n = recvfrom(cfd, buf, sizeof(buf), 0, (struct sockaddr *)&clientsock, &len);// 将大写转换为小写for (i = 0; i < n; i++){buf[i] = toupper(buf[i]);}char sIP[16];memset(sIP, 0x00, sizeof(sIP));printf("ip:[%s] port:[%d] n:[%d], buf:[%s]\n", inet_ntop(AF_INET, &clientsock.sin_addr.s_addr, sIP, sizeof(sIP)), ntohs(clientsock.sin_port), n, buf);// 发送数据sendto(cfd, buf, n, 0, (struct sockaddr *)&clientsock, len);}// 关闭套接字close(cfd);return 0;
}

客户端:
使用步骤:
1.创建socket
2.while{
send发送数据
接受数据

}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>int main()
{//创建socketint cfd = socket(AF_INET, SOCK_DGRAM, 0);if(cfd<0){perror("socket error");return -1;}int n;char buf[1024];struct sockaddr_in serv;serv.sin_family = AF_INET;serv.sin_port = htons(9999);inet_pton(AF_INET, "192.168.3.99", &serv.sin_addr.s_addr);while(1){//读标准输入数据memset(buf, 0x00, sizeof(buf));n = read(STDIN_FILENO, buf, sizeof(buf));//发送数据sendto(cfd, buf, n, 0, (struct sockaddr *)&serv, sizeof(serv));//读取数据memset(buf, 0x00, sizeof(buf));n = recvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL);printf("n:[%d], buf:[%s]\n", n, buf);}//关闭套接字close(cfd);return 0;
}
http://www.lryc.cn/news/504583.html

相关文章:

  • 用Keytool和OpenSSL生成和签发数字证书
  • 算法-动态数组-62.不同路径
  • Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)
  • 基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用
  • JAVA后端实现全国区县下拉选择--树形结构
  • 数据结构速成
  • Electron-Vite 项目搭建(Vue)
  • 如何寻找和改进开源项目来作为个人简历项目
  • STEM真题 第五题 比 n 小的最大数
  • HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face 论文解读
  • 深入了解HTTPDNS-使用Python实现一个HTTPDNS服务
  • IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁
  • 网络安全教学博客(二):常见网络安全威胁剖析
  • 区块链技术及应用(期末考试版)
  • Ubuntu22.04 docker如何发布镜像(和用git差不多)
  • 基于python绘制数据表(上)
  • 【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章
  • Python PPT合并与拆分 – 详解
  • 舌头分割数据集labelme格式2557张1类别
  • LVS能否实现两台服务器的负载均衡
  • onlyoffice 容器配置修改后制作镜像导出以及上传到 dockerhub
  • Java常用 Date 时间格式化、Calender日历、正则表达式的用法
  • 案例讲解自然语言处理(NLP)
  • tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)
  • 2.python变量
  • 【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)
  • opencv获取摄像头的最大分辨率图像
  • 23.DDD与微服务
  • Redis是什么?Redis和MongoDB的区别在那里?
  • git SSL certificate problem: unable to get local issuer certificate