嵌入式学习-网络编程-Day2

思维导图

Day2.png

tcp通信流程

tcp.png

udp通信流程

udp.png

作业1

写一个基于TCP协议的客户端来控制RobArm机械臂

代码

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.122.71"
#define CLI_PORT 6666
#define CLI_IP "192.168.122.36"int main(int argc, const char *argv[])
{//1.创建套接字int cfd  = socket(AF_INET,SOCK_STREAM,0/*IPPROTO_TCP*/);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//将端口号快速重用函数int reuse =1;if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1){perror("setsockopt error");return -1;}//2.绑定(随意)struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("bind success");//printf("bind success %s %s %d\n",__FILE__,__func__,__LINE__);//3.连接服务器//3.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//3.2链接if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("链接成功\n");//4.收发数据char bufred[5]={0xff,0x02,0x00,-90,0xff};char bufblue[5]={0xff,0x02,0x01,0,0xff};while(1){char ch;printf("请输入w&a&s&d:");scanf("%c",&ch);getchar();if(ch == 'w'){bufred[3]+=5;if(bufred[3]>90){bufred[3]=90;continue;}}else if(ch == 's'){bufred[3]-=5;if(bufred[3]<-90){bufred[3]=-90;continue;}}else if(ch == 'a'){bufblue[3]-=5;if(bufblue[3]<0){bufblue[3]=0;continue;}}else if(ch == 'd'){bufblue[3]+=5;if(bufblue[3]>180){bufblue[3]=180;continue;}}else{puts("输入有误");}//发送给服务器send(cfd,bufred,sizeof(bufred),0);send(cfd,bufblue,sizeof(bufblue),0);printf("发送成功\n");}//5.关闭套接字close(cfd);return 0;
}

实现结果如下

image.png
image.png
image.png

作业2

再次完成TCP网络通信

代码

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.122.36"int main(int argc, const char *argv[])
{//1.创建套接字int sfd  = socket(AF_INET,SOCK_STREAM,0/*IPPROTO_TCP*/);if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//将端口号快速重用函数int reuse =1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");//2.给套接字绑定IP和端口号//2.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//2.2绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success %s %s %d\n",__FILE__,__func__,__LINE__);//3.将套接字设置成监听状态if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success %s %s %d\n",__FILE__,__func__,__LINE__);//4.阻塞等待客户端的链接请求//4.1定义容器接收客户端的地址信息struct sockaddr_in cin;   //用于接收地址信息socklen_t socklen = sizeof(cin);  //用于接收地址信息的大小int newfd=-1;if((newfd =accept(sfd,(struct sockaddr*)&cin,&socklen))==-1){perror("accept error");return -1;}printf("您有一个新的客户端[%s:%d]发来连接请求 success %s %s %d\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),__FILE__,__func__,__LINE__);//5.跟客户端进行通信char buf[128]="";while(1){bzero(buf,sizeof(buf));int res=recv(newfd,buf,sizeof(buf),0);if(res==0){puts("客户端已经下线");break;}printf("[%s:%d] : %s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);//给客户端发送消息strcat(buf,"=-=");send(newfd,buf,sizeof(buf),0);printf("发送成功\n");}//6.关闭套接字close(newfd);close(sfd);return 0;
}
#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.122.36"
#define CLI_PORT 6666
#define CLI_IP "192.168.122.36"int main(int argc, const char *argv[])
{//1.创建套接字int cfd  = socket(AF_INET,SOCK_STREAM,0/*IPPROTO_TCP*/);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.绑定(随意)struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("bind success %s %s %d\n",__FILE__,__func__,__LINE__);//3.连接服务器//3.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//3.2链接if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("");return -1;}printf("链接成功\n");//4.收发数据char buf[128]="";while(1){bzero(buf,sizeof(buf));printf("请输入:");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;//发送给服务器send(cfd,buf,sizeof(buf),0);printf("发送成功\n");if(strcmp(buf,"quit")==0){break;}//接收服务器发来的消息recv(cfd,buf,sizeof(buf),0);printf("[%s:%d]:%s\n",SER_IP,SER_PORT,buf);}//5.关闭套接字close(cfd);return 0;
}

运行结果

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式搜索引擎ElasticSearch——搜索功能

分布式搜索引擎ElasticSearch——搜索功能 文章目录 分布式搜索引擎ElasticSearch——搜索功能DSL查询文档DSL查询分类全文检索查询精确查询地理查询复合查询Function Score QueryBoolean Query 搜索结果处理排序![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/37d…

Qt 使用vs2019制作Qt静态库( *.lib )并使用

一 .创建静态库 1.创建Qt Class Library(Qt静态类库)项目 2.设置项目名以及项目路径(注意:不能有中文字符) 点击next 3.选则需要的模式以及Qt 模块 然后点击next,Finish完成创建 4. 然后手动添加Qt Widget Form File (.ui)并对设计ui 5. tpendialog.h #pragma once #includ…

[JVM] 浅谈JMM(Java 内存模型)

Java 内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是 Java 虚拟机规范中定义的一种抽象计算机内存模型&#xff0c;用于描述 Java 程序在多线程下的内存访问行为。JMM 定义了线程之间共享变量的可见性和有序性规则&#xff0c;为开发者提供了一种可靠的同…

书生.浦语大模型实战一

从专用模型到通用大模型 数据 书生.万卷1.0 文本图像-文本视频数据 OpenDataLab开放平台 图像&#xff1a;ImageNettokens语料&#xff1a;WikiQA音频视频&#xff1a;MovieNet3D模型 预训练 微调 增量续训 使用场景&#xff1a;让基座模型学习到一些新知识&#xff0…

ADT知识

c和指针 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 ADT&#xff0c;全程Abstract data type&#xff0c;即抽象数据类型。 c和指针的ADT主要包括链表、堆栈、队列和树。 c和指针的第十二章讲述的是链表。第十三章讲述的是堆栈、队…

Ubuntu 20.04 Intel RealSense D435i 相机标定教程

下载编译code_utils mkdir -p ~/imu_catkin_ws/src cd ~/imu_catkin_ws/src catkin_init_workspace source ~/imu_catkin_ws/devel/setup.bash git clone https://github.com/gaowenliang/code_utils.git cd .. catkin_make报错&#xff1a;sumpixel_test.cpp:2:10: fatal err…

vivado 使用IP Integrator源

使用IP Integrator源 在Vivado Design Suite中&#xff0c;您可以在RTL中添加和管理IP子系统块设计&#xff08;.bd&#xff09;项目或设计。使用Vivado IP集成程序&#xff0c;您可以创建IP子系统块设计。IP集成程序使您能够通过实例化和将Vivado IP目录中的多个IP核互连。可…

【cuda】二、基础知识: 内存管理 同步

在CUDA中&#xff0c;使用**cudaMalloc()来分配设备内存&#xff0c;使用cudaFree()**来释放设备内存。 cudaMallocManaged 统一内存管理 **统一虚拟寻址&#xff08;Unified Memory&#xff09;&#xff1a;使用cudaMallocManaged()**来分配可以在CPU和GPU之间共享的内存。无…

facebook广告怎么设置受众人群

在设置Facebook广告受众人群时&#xff0c;你可以遵循以下步骤&#xff1a; 打开广告创建工具&#xff0c;点击页面右上角的箭头并选择“创建广告”。选择广告目标&#xff0c;根据想要实现的目标创建广告。例如&#xff0c;想要让更多用户谈论你的主页和帖子&#xff0c;或者…

改进YOLOv8:添加CBAM注意力机制(涨点明显)

1、计算机视觉中的注意力机制 计算机视觉中的注意力机制是一种聚焦于局部信息的机制&#xff0c;其基本思想是让系统学会忽略无关信息而关注重点信息。这种机制在图像识别、物体检测和人脸识别等任务中都发挥了重要作用。 注意力机制的实现方法有多种&#xff0c;其中包括空间…

亲手打造一个本地LLM语音助手来管理智能家居

经历过 Siri 和 Google 助手之后&#xff0c;我发现尽管它们能够控制各种设备&#xff0c;但却无法进行个性化定制&#xff0c;并且不可避免地依赖于云服务。出于对新知识的渴望以及想在生活中使用一些酷炫的东西&#xff0c;我下定决心&#xff0c;要追求更高的目标。我的要求…

【RTOS】快速体验FreeRTOS所有常用API(2)任务管理

目录 二、任务管理2.1 任务创建&#xff08;三种方式&#xff09;1&#xff09;动态内存分配方式创建任务2&#xff09;静态内存分配方式创建任务3&#xff09;带有任务参数方式创建任务 2.2 任务删除2.3 两种delay 二、任务管理 该部分在上份代码基础上修改得来&#xff0c;代…

​HDD回暖于2024,与SSD决战于2028--part2

东芝和西部数据在2023年的硬盘产品中都没有采用类似希捷的HAMR技术产品&#xff0c;而是采用了其他的技术方案用于提升存储容量。 东芝采用了MAMR技术&#xff0c;通过微波磁通控制现象来提高高密度区域的写入信号质量。根据厂商的测试数据发现&#xff0c;MAMR的磁头可靠性比H…

Flink-容错机制

Flink中的容错机制 流式数据连续不断地到来&#xff0c;无休无止&#xff1b;所以流处理程序也是持续运行的&#xff0c;并没有一个明确的结束退出时间。机器运行程序&#xff0c;996 起来当然比人要容易得多&#xff0c;不过希望“永远运行”也是不切实际的。因为各种硬件软件…

HCIP ISIS实验

拓扑图&IP划分如下图&#xff1a; 第一步&#xff0c;配置IP地址&环回地址 以R1为例&#xff0c;R2~R8同理 interface GigabitEthernet 0/0/0 ip address 18.1.1.1 24 interface GigabitEthernet 0/0/1 ip address 12.1.1.1 24 interface LoopBack 0 ip address 1.1.…

第07章_面向对象编程(进阶)拓展练习(关键字:this,继承性和方法重写,关键字:super,多态性,Object类)

文章目录 第07章_面向对象编程&#xff08;进阶&#xff09;拓展练习01-关键字&#xff1a;this1、Circle类2、MyDate类3、Card类 02-继承性和方法重写4、Person、Student、Teacher类5、DepositCard、CreditCard类6、Employee、Programmer、Designer、Architect类7、判断输出结…

统计学-R语言-4.6

文章目录 前言列联表条形图及其变种---单式条形图条形图及其变种---帕累托图条形图及其变种---复式条形图条形图及其变种---脊形图条形图及其变种---马赛克图饼图及其变种---饼图饼图及其变种---扇形图直方图茎叶图箱线图小提琴图气泡图总结 前言 本篇文章是对数据可视化的补充…

Pandas实战100例 | 案例 1: 读取不同类型的数据文件

案例 1: 读取不同类型的数据文件 知识点讲解 Pandas 支持多种数据文件格式的读取&#xff0c;包括 CSV、Excel (XLS/XLSX) 和文本文件 (TXT)。了解如何从这些不同的数据源中读取数据是数据分析的基础。 示例代码 读取 CSV 文件 # 读取 CSV 文件 df_csv pd.read_csv(examp…

Vsearch安装

wget https://github.com/torognes/vsearch/releases/download/v2.26.1/vsearch-2.26.1-linux-x86_64.tar.gz tar xzf vsearch-2.26.1-linux-x86_64.tar.gz (完整路径)/bin/vsearch 去冗余 ${software_path}/Vsearch/vsearch-2.26.1-linux-x86_64/bin/vsearch --derep_prefix…

Centos7.9忘记Root密码找回

Centos7.9忘记Root密码找回 1. 背景2. 目的3. 具体操作3.1 重启系统3.2 增加代码3.3 单用户模式3.4 单用户模式3.5 修改密码3.6 创建文件3.7 重启验证 1. 背景 由于物理主机上安装了多个虚拟机&#xff0c;部分虚拟机忘记了root密码&#xff0c;前段时间刚好要用这个虚拟机&…