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

嵌入式入门Day35

网络编程 Day2

  • 套接字socket
  • 基于TCP通信的流程
    • 服务器端
    • 客户端
    • TCP通信API
  • 基于UDP通信的流程
    • 服务器端
    • 客户端
  • 作业

套接字socket

  1. socket套接字本质是一个特殊的文件,在原始的Linux中,它和管道,消息队列,共享内存,信号等一样,都只能进行主机内的通信
  2. 随着历史的发展,有了TCP/IP协议族的出现,使得socket套接字可以通过网卡,与外部主机进行通信
  3. socket函数会生成一个文件描述符,不同主机内的进程都可以对该文件描述符进程读写

在这里插入图片描述

基于TCP通信的流程

在这里插入图片描述

服务器端

  1. socket:创建原始套接字
  2. bind:将原始套接字与主机IP绑定(该服务器的身份,服务器以主机的身份通信)
  3. listen:将原始套接字设置为监听状态
  4. accept:接收客户端的连接,获取客户端信息,并生成新的套接字描述符用于与客户端通信。
  5. 发送信息,接收信息,关闭

客户端

  1. socket:创建套接字
  2. bind(可选):客户端绑定IP和端口号,绑定后客户端将会使用绑定的IP端口号来访问服务器,如果不绑定系统将会自动分配IP和端口号
  3. connect:向服务器发送连接请求
  4. 发送信息,接收信息,关闭

TCP通信API

#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol);功能:创建socket套接字描述符参数1:AF_UNIX,      AF_LOCAL:本地通信模式AF_INET        IPv4 通信AF_INET6       IPv6 通信参数2传输层通信协议:SOCK_STREAM:TCP通信协议SOCK_DGRAM:UDP通信协议参数3:如果参数2指定了TCP或者UDP具体通信协议,参数3可以省略,如果没有指定需要加上参数3.返回值:成功返回套接字描述符,失败返回-1,并置位错误码。eg:socket(AF_INET,SOCK_STREAM,0)#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);参数1:套接字描述符参数2;struct sockaddr_in {sa_family_t    sin_family; /* IPV4通信协议 */in_port_t      sin_port;   /* 端口号 */struct in_addr sin_addr;   /* IP号(IP地址转化的IP号) */};参数2结构体第三个成员还是结构体如下:struct in_addr {uint32_t       s_addr;     /* IP地址在网络的形式 */};参数3:参数2的结构体大小。返回值:成功返回0,失败返回-1,并置位错误码。#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int listen(int sockfd, int backlog);功能:监听客户端连接请求参数1:套接字描述符参数2:监听的最大数量是128。返回值:成功返回0,失败返回-1,并置位错误码。#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);功能:接收连接请求,并记录连接者的信息(阻塞函数)参数1:套接字描述符参数2:存储连接者的详细信息。参数3:参数2的大小。返回值:成功返回新的描述符,失败返回-1,并置位错误码。int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能:与服务器建立连接的函数参数1:套接字描述符参数2:需要连接的服务器具体信息(IP,端口号,通信域等)参数3:参数2的大小。返回值:成功返回0,失败返回-1,并置位错误码

基于UDP通信的流程

在这里插入图片描述

服务器端

  1. 创建套接字
  2. 绑定主机IP和端口号
  3. 收发信息

客户端

  1. 创建套接字
  2. 收发信息

作业

使用UDP和connect函数实现一对一通信

//服务器
#include <myhead.h>#define IP "192.168.209.241"
#define PORT 6666int main(int argc, const char *argv[])
{//创建UDP套接字int socketfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == socketfd){perror("socket");return -1;}//绑定struct sockaddr_in server = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if (-1 == bind(socketfd, (struct sockaddr *)&server, sizeof(server))){perror("bind");return -1;}//收发信息struct sockaddr_in client;int client_len = sizeof(client);int flag = 1;char buff[1024] = "";while (1){//记录首个发送信息的客户端并连接while (flag){recvfrom(socketfd,buff,sizeof(buff),0,(struct sockaddr *)&client, &client_len);printf("收到来自%s:%d的信息:%s\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port), buff);if (-1 == connect(socketfd, (struct sockaddr *)&client, client_len)){perror("connect");return -1;}flag = 0;}strcat(buff,"copy");send(socketfd, buff, strlen(buff), 0);bzero(buff, sizeof(buff));recv(socketfd, buff, sizeof(buff), 0);printf("收到来自%s:%d的信息:%s\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port), buff);bzero(buff, sizeof(buff));}return 0;
}
//客户端
#include <myhead.h>#define IP "192.168.209.241"
#define PORT 6666int main(int argc, const char *argv[])
{//创建UDP套接字int socketfd = socket(AF_INET, SOCK_DGRAM, 0);if (socketfd == -1){perror("socket");return -1;}//连接服务器struct sockaddr_in server = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if (-1 == connect(socketfd, (struct sockaddr *)&server, sizeof(server))){perror("connect");return -1;}//收发信息,因为使用了connect连接了服务器,所以可以直接使用send和recv函数直接操作char buff[1024] = "";while (1){fgets(buff, sizeof(buff), stdin);buff[strlen(buff)-1] = '\0';
//		sendto(socketfd,buff,sizeof(buff),0,(struct sockaddr *)&server, sizeof(server));send(socketfd,buff, strlen(buff),0);bzero(buff,sizeof(buff));
//		recvfrom(socketfd,buff,sizeof(buff),0,NULL,NULL);recv(socketfd,buff, sizeof(buff), 0);printf("收到服务器信息:%s\n", buff);}return 0;
}

相关文章:

嵌入式入门Day35

网络编程 Day2 套接字socket基于TCP通信的流程服务器端客户端TCP通信API 基于UDP通信的流程服务器端客户端 作业 套接字socket socket套接字本质是一个特殊的文件&#xff0c;在原始的Linux中&#xff0c;它和管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号等…...

AE/PR/达芬奇模板:自动光标打字机文字标题移动效果动画模板预设

适用于AE/PR/达芬奇的 Typewriter Pro 该模板包括专业的打字机文本动画&#xff0c;并包含很酷的功能&#xff0c;以及帮助文档和分步画外音视频教程。 主要特点 轻松的持续时间控制您可以通过在持续时间控件中输入 start 和 end duration&#xff08;开始和结束持续时间&…...

RCE漏洞

一、课程知识点 1、远程代码执行漏洞原理与利用 2、常见的代码执行函数 3、常见的命令执行函数 4、常见的绕过姿势 5、命令执行漏洞防范 二、技术目标 1、掌握命令执行漏洞的原理 2、掌握 PHP 命令执行和代码执行的相关函数 3、掌握常见的绕过姿势 4、掌握代码执行漏洞防御措施…...

在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题

00 两种可行方法分别是&#xff1a; 使用数组存储每一位数据并进行进位运算&#xff1a;通过将大数按位拆分成数组&#xff0c;然后实现逐位加法、进位等操作。使用符号变量进行计算&#xff1a;将数值分成低位和高位&#xff0c;分别用符号变量进行计算。 01&#xff1a;使用…...

【Compose multiplatform教程20】在应用程序中使用多平台资源

为项目设置资源后&#xff0c;生成项目以生成提供资源访问权限的特殊类。要重新生成类和所有资源访问器&#xff0c;请再次生成项目或在 IDE 中重新导入项目。ResRes 之后&#xff0c;您可以使用生成的类从您的代码或外部库访问配置的多平台资源。 自定义访问器类生成 您可以使…...

深入浅出:从入门到精通大模型Prompt、SFT、RAG、Infer、Deploy、Agent

阅读原文 渐入佳境 我们都知道&#xff0c;通过编写一个提示词&#xff08;prompt&#xff09;&#xff0c;我们可以引导大模型生成回答&#xff0c;从而开启愉快的人工智能对话&#xff0c;比如让模型介绍一下卡皮巴拉。上边简图描述了这个过程&#xff0c;我们拆成两部分 pr…...

紫光同创-盘古200pro+开发板

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 一、开发系统介绍 开发系统概述 MES2L676-200HP 开发板采用紫光同创 logos2 系列 FPGA&#xff0c;型号&#xff1a;…...

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-CSDN博客 类型含义使用场景示例nil表示一个指向 Objective - C 对象的空指针。在 Objective - C 和 Swift&#xff08;与 Objective - C 交互时&#xff09;中用于表示对象不存在。当一个对象变量没有指向任何有效的对象实例…...

【优选算法】有效三角形的个数(双指针算法)

优质专栏&#xff1a;算法_云边有个稻草人的博客-CSDN博客 目录 【611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09;】 解法一&#xff1a; 解法二&#xff1a; 【611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09;】 解法一&#xff1a; 三层for…...

中介者模式(Mediator Pattern)、桥接模式(Bridge Pattern) 和 策略模式(Strategy Pattern)

中介者模式&#xff08;Mediator Pattern&#xff09;、桥接模式&#xff08;Bridge Pattern&#xff09; 和 策略模式&#xff08;Strategy Pattern&#xff09; 都是常见的设计模式&#xff0c;它们解决不同类型的问题。我们将通过 Swift 示例来说明它们的使用场景&#xff0…...

客户案例:基于慧集通打通聚水潭电商ERP与用友U8系统集成之路

一、引言 本原型客户是 生物科技公司&#xff0c;其公司系列抗菌抗病毒产品广泛应用于医疗用品、纺织服饰、家纺用品、母婴护理、女性用品、个人防护等多个领域。在知识产权方面&#xff0c;公司在专业领域已获得商标和专利近百项&#xff0c;创新能力得到了国家及行业内普遍认…...

阿里云clb是什么

传统型负载均衡服务 ‌阿里云CLB&#xff08;Classic Load Balancer&#xff09;是阿里云提供的一种传统型负载均衡服务&#xff0c;主要用于将访问流量根据转发策略分发到后端多台云服务器。‌‌ CLB的定义和功能 CLB是一种流量分发控制服务&#xff0c;通过设置虚拟服务地…...

【Cursor编辑器】自用经验和实操(迭代更新)

1.启动composer crtl I 2.生成直接一直问加载 3. 实操 生成个知识图谱&#xff0c;使用csv文件里面的数据创关系和节点。...

【学习笔记】ChatGPT原理与应用开发——基础科普

HuggingLLM&#xff08;ChatGPT原理与应用开发&#xff09; 原文链接&#xff1a;HuggingLLM&#xff08;ChatGPT原理与应用开发&#xff09;-课程详情 | Datawhale 此处仅为学习记录和总结 1&#xff1a;基础科普 1.1&#xff1a;自然语言背景 图灵测试 如果一个人&#x…...

基于Web的实验中心工作管理网站的设计与实现

写作任务 一、课题背景 实验中心承担了全校计算机公共基础课程和学院专业课程&#xff0c;需要对实验中心工作进行有效的管理。 二、课题任务 本课题设计和实现实验中心工作管理系统。 系统的主要内容包括&#xff1a; &#xff08;1&#xff09;人员管理&#xff1b; &am…...

docker 安装minio

docker pull minio/minio #启动 mkdir -p /root/minio/config mkdir -p /root/minio/datadocker run -d \--name minio \-p 9002:9000 \-p 9001:9001 \--restartalways \-v /root/minio/data:/data \-v /root/minio/config:/root/.minio \-e "MINIO_ACCESS_KEYminioadmin…...

ubuntu下ipmi的使用(4028)

参考ubuntu系统下配置IPMI_ubuntu ipmi-CSDN博客 参考&#xff1a;ipmitool ubuntu 安装_ipmi centos ubuntu使用总结-CSDN博客 1.安装 sudo apt-get -y install ipmitool 2.加载 modprobe ipmi_msghandlermodprobe ipmi_devintfmodprobe ipmi_si 3.使用,查看不到的话&am…...

周记-唐纳德的《计算机程序设计艺术》

用代码生成代码 开发一个协议&#xff0c;字段有些多&#xff0c;每个字段是QT的属性&#xff0c;需要写Q_PROPERTY&#xff0c;一个一个编辑的话比较繁琐&#xff0c;耗费时间。后来就用代码生成了头文件和源文件&#xff0c;get和set还有signal函数&#xff0c;内容基本都是…...

极品飞车6的快捷键与车辆等级

极品飞车&#xff0c;英文全称为Need for Speed&#xff0c;是EA公司于1994年开始研发的赛车类竞技游戏。从1996年的《极品飞车-特别版》、2002年的《极品飞车:闪电追踪2》、2005年的《极品飞车:地下狂飙2》、到2024年《极品飞车:集结》&#xff0c;是70后、80年、90年等几代人…...

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...