【嵌入式学习】网络编程day0229

news/发布时间2024/9/20 9:31:25

一、思维导图

二、练习

TCP通信

服务器

#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("error");return -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);if(bind(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error2");return -1;}//监听if(listen(wfd,128)==-1){perror("error3");return -1;}//接受客户端的连接struct sockaddr_in cin;socklen_t socklen=sizeof(cin);	int cfd=-1;if((cfd=accept(wfd,(struct sockaddr *)&cin,&socklen))==-1){perror("error3");return -1;}char str[128]="";while(1){//清空数组bzero(str,sizeof(str));//读取数据recv(cfd,str,sizeof(str),0);printf("读取数据:%s\n",str);if(strcmp(str,"quit")==0){printf("读取结束\n");break;}//修改数据strcat(str,"^_^");send(cfd,str,strlen(str),0);}close(wfd);close(cfd);return 0;
}

客户端

#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("error");return -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);if(connect(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error3");return -1;}char str[128]="";while(1){//清空数组bzero(str,sizeof(str));//写入数据printf("请输入:");fgets(str,sizeof(str),stdin);str[strlen(str)-1]=0;send(wfd,str,sizeof(str),0);if(strcmp(str,"quit")==0){printf("程序结束\n");break;}//读取从服务器发来的数据bzero(str,sizeof(str));recv(wfd,str,sizeof(str),0);printf("从服务器读取的数据为:%s\n",str);}close(wfd);return 0;
}

UDP通信

服务器

#include <myhead.h>
#define SER_PORT 7899
#define SER_IP "192.168.126.42"
int main(int argc, const char *argv[])
{//创建套接字int wfd=socket(AF_INET,SOCK_DGRAM,0);if(wfd==-1){perror("error");return -1;}printf("wfd=%d\n",wfd);//绑定//将服务器的网络数据绑定struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(bind(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error");return -1;}char str[128]="";struct sockaddr_in cin;socklen_t socklen=sizeof(cin);while(1){bzero(str,sizeof(str));recvfrom(wfd,str,sizeof(str),0,(struct sockaddr *)&cin,&socklen);printf("收到得数据为:%s\n",str);	if(strcmp(str,"quit")==0){printf("程序结束\n");break;}strcat(str,"^_^");if(sendto(wfd,str,strlen(str),0,(struct sockaddr *)&cin,socklen)==-1){perror("Eroor");return -1;}}close(wfd);return 0;
}

客户端


#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 7899
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_DGRAM,0))==-1){perror("error");return -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);	char str[128]="";while(1){bzero(str,sizeof(str));printf("请输入数据:");fgets(str,sizeof(str),stdin);str[strlen(str)-1]=0;sendto(wfd,str,sizeof(str),0,(struct sockaddr *)&sin,sizeof(sin));if(strcmp(str,"quit")==0){printf("程序结束\n");break;}}close(wfd);return 0;
}

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

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

相关文章

代码随想录Leetcode139. 单词拆分

题目&#xff1a; 代码(首刷看解析 2024年2月28日&#xff09;&#xff1a; class Solution { public:// 动态规划bool wordBreak(string s, vector<string>& wordDict) {int n s.size();// 初始化dp[i]vector<int> dp(n 1, false);dp[0] true;// 遍历 排列…

Linux——进程控制(一)进程的创建与退出

目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$? 3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前&#xff0c;我们学过linux中的非常重要的函数——…

【网站项目】328学生就业管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

c++面试2

一 、 char类型数组转换成字符串的方法 使用 std::string 构造函数: 可以使用 std::string 类的构造函数直接将 C 风格字符串转换为 std::string 对象&#xff0c;例如&#xff1a;std::string str(buf);。 const char* buf "Hello, world!"; // C 风格字符串 std::…

WPF 滑动条样式

效果图&#xff1a; 浅色&#xff1a; 深色&#xff1a; 滑动条部分代码&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…

动态通讯录——C语言【详解+全部码源】

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;进阶C语言&#xff0c;本专栏主要讲解数据存储&#xff0c;进阶指针&#xff0c;动态内存管理&a…

Spring - InitializingBean、@PostConstruct、@Bean(initMethod = “init“)和构造方法执行优先级比较

执行顺序优先级 构造方法 > postConstruct > afterPropertiesSet > init方法 代码案例 Component public class InitializingBeanTest implements InitializingBean {public InitializingBeanTest(){System.out.println("构造方法");}Overridepublic void…

计算机网络物理层知识点总结

本篇博客是基于谢希仁编写的《计算机网络》和王道考研视频总结出来的知识点&#xff0c;本篇总结的主要知识点是第二章的物理层。上一章的传送门&#xff1a;计算机网络体系结构-CSDN博客 通信基础 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&am…

曲线的凹凸性与拐点【高数笔记】

1.什么是曲线的凹凸性 2.什么是曲线的拐点 3.拐点的特征 4.拐点与驻点有什么不同 5.拐点的表示方法与驻点有什么不一样 6.拐点与凹凸区间怎么求

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章&#xff0c;我来介绍一下我的项目中的另外一个功能&#xff1a;显示评论和添加评论。 其实这两个功能都不怎么重要&#xff0c;我感觉最重要的应该是用户注册登录功能&#xff0c;这个也了解一下&#xff0c;知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

接上Promise()对象处理回调地狱:怎么用.then()?什么是Async、Await?

上一篇基于JavaScript基础的异步、同步操作&#xff0c;promise、.then()-CSDN博客讲了【啥是异步操作、同步操作&#xff1f;】然后简单讲了回调函数是啥、Promise()对象是啥、.then()函数是啥&#xff0c;这一篇讲讲promise()对象到底怎么配合.then()函数解决回调地狱&#x…

Executable and Linkable Format(ELF)

File layout ELF文件有两种视图。程序头表&#xff08;Program Header&#xff09;显示在运行时使用的段&#xff08;Segments&#xff09;&#xff0c;而节头表&#xff08;Section Header&#xff09;则列出了二进制文件的所有节&#xff08;Sections&#xff09;的集合。程…

GoFrame:如何简单地搭建一个简单地微服务

一切资料来源于GoFrame官网, 感兴趣的, 可以直接去官网查阅相关资料。 首先下载框架工具, 下载地址:https://github.com/gogf/gf/releases 然后进入你想要放置的项目文件夹, 执行命令行 gf init {project_name} #project_name为你的项目名 执行完后项目结构如图所示 然…

【HDFS】Decommision(退役) EC数据节点剩最后几个块卡住的问题

一、背景 近期操作退役EC集群的节点。在退役的过程中,遇到了一些问题。特此总结一下。 本文描述的问题现象是: 每一批次退役10个节点,完全退役成功后开始操作下一批。 但是,中间有一批次有2台节点的Under Replicated Blocks一直是1,不往下降。 处于Decommissioning状态卡…

Python学习 问题汇总(None)

None的总结 在Python中&#xff0c;对于一些变量往往需要赋初始值&#xff0c;为了防止初始值与正常值混淆&#xff0c;通常采用置0或置空操作&#xff0c;置0比较简单&#xff0c;置空则是赋NoneNone是一个空值&#xff0c;可以赋给任意类型的变量&#xff0c;起到占位的作用…

(定时器/计数器)中断系统(详解与使用)

讲解 简介 定时器/计数器 定时器实际上也是计数器,只是计数的是固定周期的脉冲 定时和计数只是触发来源不同(时钟信号和外部脉冲)其他方面是一样的。 定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值…

Nodejs 第四十二章(jwt)

什么是jwt? JWT&#xff08;JSON Web Token&#xff09;是一种开放的标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用间传递信息的一种方式。它是一种基于JSON的安全令牌&#xff0c;用于在客户端和服务器之间传输信息。 https://jwt.io/ JWT由三部分组成&…

图片的处理库Thumbnailator

摘要&#xff1a;最近遇到图片处理的问题&#xff0c;借助了Thumbnailator库&#xff0c;记录下使用步骤如下…… 图片处理&#xff0c;JDK中也提供了对应的工具类&#xff0c;不过处理较麻烦&#xff0c;Thumbnailator 是Google一个 开源Java 图像处理库&#xff0c;用于简化 …

ChatGPT/GPT4科研应用与AI绘图及论文高效写作

原文&#xff1a;ChatGPT/GPT4科研应用与AI绘图及论文高效写作 第一&#xff1a;2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二&#xff1a;…

【一】【算法分析与设计】基础测试

排列式 题目描述 7254是一个不寻常的数&#xff0c;因为它可以表示为7254 39 x 186&#xff0c;这个式子中1~9每个数字正好出现一次 输出所有这样的不同的式子&#xff08;乘数交换被认为是相同的式子&#xff09; 结果小的先输出&#xff1b;结果相同的&#xff0c;较小的乘…
推荐文章