嵌入式学习L6网络编程D5UDP编程

embedded/2025/3/17 2:38:40/

网络编程

UDPclient端

/*udp demo */
/* usage:* ./client serv_ip serv_port 
*/
#include "net.h"
void usage(char *s)
{printf("\nThis is udp demo!\n");printf("\nUsage:\n\t %s serv_ip serv_port",s);printf("\n\t serv_ip: udp server ip address");printf("\n\t serv_port: udp server port(serv_port > 5000)\n\n");
}int main(int argc, char *argv[])
{int fd = -1;int port = SERV_PORT;port = atoi(argv[2]);if(port < 0 || (port >0 && port <= 5000)) {usage(argv[0]);exit(1);}struct sockaddr_in sin;if(argc !=3) {usage(argv[0]);exit(1);}        /* 1. 创建socket fd*/if( (fd = socket(AF_INET,SOCK_DGRAM, 0)) < 0) { //UDP编程perror("socket");exit(1);}/*2.1 填充struct sockaddr_in结构体变量 */bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(SERV_PORT); //网络字节序的端口号
#if 0sin.sin_addr.s_addr = inet_addr(argv[1]);
#elseif( inet_pton(AF_INET, argv[1], (void *)&sin.sin_addr) != 1) {perror("inet_pton");exit(1);}
#endif	printf("UDP client started!\n");char buf[BUFSIZ];while(1) {fprintf(stderr,"pls input string:");bzero(buf, BUFSIZ);if( fgets(buf, BUFSIZ-1, stdin) ==NULL) {perror("fgets");continue;}sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)&sin, sizeof(sin)); if( !strncasecmp(buf, QUIT_STR, strlen(QUIT_STR))) {  //用户输入了quit字符printf("Client is exited!\n");break;}}close(fd);return 0;
}

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主要步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

serve

#include "net.h"int main(void)
{int fd = -1;struct sockaddr_in sin;/* 1. 创建socket fd */if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) { //udp程序perror ("socket");exit (1);}/* 2. 允许绑定地址快速重用 */int b_reuse = 1;setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));/*2. 绑定 *//*2.1 填充struct sockaddr_in结构体变量 */bzero (&sin, sizeof (sin));sin.sin_family = AF_INET;sin.sin_port = htons (SERV_PORT);       //网络字节序的端口号/* 让服务器程序能绑定在任意的IP上 */
#if 1sin.sin_addr.s_addr = htonl (INADDR_ANY);
#elseif (inet_pton (AF_INET, SERV_IP_ADDR, (void *) &sin.sin_addr) != 1) {perror ("inet_pton");exit (1);}
#endif/*2.2 绑定 */if (bind (fd, (struct sockaddr *) &sin, sizeof (sin)) < 0) {perror ("bind");exit (1);}char buf[BUFSIZ];struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);printf("\nUDP server started!\n");while(1) {bzero(buf, BUFSIZ);if( recvfrom(fd, buf, BUFSIZ-1, 0,(struct sockaddr *)&cin, &addrlen ) < 0) {perror("recvfrom");continue;}char ipv4_addr[16];if (!inet_ntop (AF_INET, (void *) &cin.sin_addr, ipv4_addr, sizeof (cin))) {perror ("inet_ntop");exit (1);}printf("Recived from(%s:%d), data:%s",ipv4_addr, ntohs(cin.sin_port), buf);if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) {  //用户输入了quit字符printf ("Client(%s:%d) is exiting!\n", ipv4_addr, ntohs(cin.sin_port));}}close(fd);return 0;
}

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

对比

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


http://www.ppmy.cn/embedded/173215.html

相关文章

周志华机器学习西瓜书 第九章 聚类-学习笔记

一、聚类任务 聚类是无监督学习中非常典型的任务&#xff0c;聚类的目的是将数据样本划分为若干个通常不相交的子集&#xff0c;每一个子集成为"簇-cluster"&#xff0c;其即可以作为一个单独过程&#xff0c;用于找寻数据内在的分布结构&#xff0c;也可作为分类等其…

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速&#xff0c;销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点&#xff0c;基于DjangoVue架构构建…

鸿蒙系统liteos_m开发环境配置

在工作中开发基于HC32F4A0的鸿蒙liteos_m的操作系统移植时&#xff0c;开发环境选的命令行模式&#xff0c;官方的参考请看链接《快速入门概述》 在ubuntu18.04环境中安装时&#xff0c;安装库和工具集时官方提供的安装库的指令无法进行安装&#xff0c;部分库应该是有安装顺序…

IIS EXPRESS 虚拟目录经验谈!

最近在给客户开发一个事件提醒软件&#xff0c;用的是c# 版本是vs2022&#xff0c;在运行调试程序时&#xff0c;电脑会自动启动IIS Express,电脑右小角出现两个虚拟目录&#xff0c;对应两个端口&#xff0c;图示如下&#xff1a; 只能点击选择http://localhost:52726&#xf…

在群晖DS923+手动安装我Wordpress最新版

1.准备好群晖环境。 2.打开数据库&#xff0c;新建数据库。 数据库名&#xff0c;wordpress 3.下载最新版wordpress&#xff0c;并安装WordPress主程序 访问WordPress官方网站,下载最新版.在群晖Web文件夹下创建博客主目录,命名为wordpress(或其他任意文件名).将下载并解压的…

浅谈分布式多节点嵌入式系统中RS485总线指令冲突解决及性能优化

一、问题 RS485总线多节点竞争总线时&#xff0c;是否遇到过&#xff0c;由于缺乏冲突检测机制&#xff0c;发生指令冲突&#xff1f;系统实时性如何保障&#xff1f;如何解决了&#xff1f;采用主从轮询方式&#xff1f;同样也会因高延迟加剧冲突&#xff01;笔者在项目开发过…

历年华中科技大学计算机考研复试上机真题

历年华中科技大学计算机考研复试上机真题 2022华中科技大学计算机考研复试上机真题 2021华中科技大学计算机考研复试上机真题 2019华中科技大学计算机考研复试上机真题 在线评测&#xff1a;https://pgcode.cn 八进制 题目描述 输入一个整数&#xff0c;将其转换成八进制数…

将分支`XXX`合并到远程分支`master

将分支feat-task合并到远程分支master 首先&#xff0c;切换到本地的 master 分支 git checkout master确保你的本地 master 分支是最新的&#xff0c;拉取远程的更新 git pull origin master将 feat-task 分支的代码合并到 master 分支 git merge feat-task如果在合并过程…