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

嵌入式学习Day29---Linux软件编程---网络编程

目录

一、网络基本概念

1.1.协议

1.2.国际网络通信协议标准

1.OSI协议

2.TCP/IP协议 (现在常用)

        1.应用层

        2.传输层

                 1)UDP (传输控制协议)

                 2)TCP (用户数据报协议)

        3.网络层 

        IP地址分类  

          MAC地址:设备自带网卡的地址(该地址是唯一的);

          端口号:找到同一台主机不同的应用程序;

 1.3.命令

       1. ifconfig

        2.将虚拟机的网络IP设置为桥接模式     

二、UDP编程

2.1.套接字

1.什么是套接字?

2.功能

2.2.UDP发信息步骤

1.创建套接字

2.将自己的端口和IP与套接字绑定

3.配置要发生的IP

4.发消息

5.关闭套接字 

2.3.UDP接收消息步骤

1.创建套接字

2.将自己的端口和IP与套接字绑定

3.接收消息

三、总结


一、网络基本概念

1.1.协议

        通信双方约定的一套标准;

1.2.国际网络通信协议标准

1.OSI协议

        应用层          发送的数据内容表示层          数据是否加密会话层          是否建立会话连接传输层          数据传输的方式网络层          数据的路由数据链路层      局域网内部通信物理层          物理介质的连接

2.TCP/IP协议 (现在常用)

        应用层          发送的数据内容传输层          数据传输的方式网络层          数据由一台主机到达另一台主机网络接口层      物理介质连接 
        1.应用层
            FTP     文件传输协议    TFTP    简单文件传输协议HTTP    超文本传输协议HTTPS   安全超文本传输协议SMTP    简单邮件传输协议TELNET  网络终端登录协议DNS     域名系统.. 
        2.传输层
                 1)UDP (传输控制协议)
              UDP:不安全、不可靠的传输方式UDP机制简单UDP占用的资源开销比较小

                他只管发,不管对方能不能收到 

                 2)TCP (用户数据报协议)
              TCP:安全、可靠的传输方式TCP机制复杂TCP占用的资源开销比较大                 

                为何安全呢?

此过程会经历如下:                

                 三次握手建立连接,确认双方能够通信
                 通信过程中保障数据传输的完整性
                 四次挥手断开连接,确保数据传输的完整

        3.网络层 
IPV4协议IP地址IP地址 = 网络位 + 主机位 网络位:IP地址所属的网段(局域网的编号)主机位:局域网中的第几台主机网段号:网络位不变,主机位全为0 广播号:网络位不变, 主机位全为1 子网掩码:每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位
        IP地址分类  
        IP地址的划分:公有地址私有地址A类:1.0.0.0 ~ 126.255.255.255子网掩码:255.0.0.0 管理超大规模型网络私有地址:10.0.0.0 ~ 10.255.255.255B类:128.0.0.0 ~ 191.255.255.255子网掩码:255.255.0.0 管理大中规模型网络私有地址:172.16.0.0 - 172.31.255.255C类:192.0.0.0 ~ 223.255.255.255子网掩码:255.255.255.0管理中小规模型网络私有地址:192.168.0.0 ~ 192.168.255.255D类:224.0.0.0 ~ 239.255.255.255用于组播:255.255.255.0E类:240.0.0.0 ~ 255.255.255.255用于实验和研究:255.255.255.0
          MAC地址:设备自带网卡的地址(该地址是唯一的);
          端口号:找到同一台主机不同的应用程序;

 1.3.命令

       1. ifconfig

             查看自己IP地址

        2.将虚拟机的网络IP设置为桥接模式     

2.将虚拟机IP地址设置为桥接模式:1.点击"虚拟机"2.点击"设置"3.选择"网络适配器"4.点击"桥接模式"5.点击"确定"3.将虚拟机桥接到无线网卡上去1.点击"编辑"2.点击"虚拟网络编辑器"3.点击"更改设置"4.已桥接至选择无线网卡5.点击"确定"4.修改网卡配置文件1.sudo vim /etc/network/interfaces2.修改文件内容为:auto loiface lo inet loopbackauto ens33iface ens33 inet dhcp3.保存退出:wq5.重启网络服务sudo /etc/init.d/networking restart6.测试与局域网内其余IP地址是否能够连通ping 192.168.0.167ping www.baidu.com 

二、UDP编程

2.1.套接字

1.什么是套接字?

依次通信对象的抽象

2.功能

实现Linux系统下的网络通信 

2.2.UDP发信息步骤

1.创建套接字

函数接口:socket

 int socket(int domain, int type, int protocol);功能:创建套接字参数:domain: AF_INET 表示IPV4协议type:套接字类型SOCK_STREAM:流式套接字SOCK_DGRAM:数据报套接字SOCK_RAW:原始套接字protocol:TCP和UDP协议:0返回值:  成功返回用来通信的文件描述符失败返回-1 

2.将自己的端口和IP与套接字绑定

函数接口:htons、inet_addr、bind

uint16_t htons(uint16_t hostshort);功能:    将本地字节序(小端)转换成网络大端字节序
 in_addr_t inet_addr(const char *cp);功能:将字符串的IP地址转换为32位的地址类型 
  int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能:将套接字与IP地址和端口进行绑定参数:addr:绑定地址结构体空间首地址addrlen:绑定地址空间大小返回值:成功返回0 失败返回-1 

      注意:
        只能绑定自己的IP地址

3.配置要发生的IP

函数接口: htons、inet_addr

4.发消息

函数接口:sendto

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);功能:发送信息参数:sockfd:套接字文件描述符buf:发送数据空间首地址len:发送数据长度flags:发送属性 默认为0 dest_addr:目标地址存放空间首地址addrlen:目的地址的长度返回值:成功返回发送字节数失败返回-1 struct sockaddr_in {sa_family_t    sin_family; /* address family: AF_INET */in_port_t      sin_port;   /* port in network byte order */struct in_addr sin_addr;   /* internet address */};/* Internet address. */struct in_addr {uint32_t       s_addr;     /* address in network byte order */};

 注意: 如果sendto对应的套接字没有绑定端口,则sendto绑定一个随机端口完成发送功能

5.关闭套接字 

函数接口:close

2.3.UDP接收消息步骤

1.创建套接字

函数接口:socket

2.将自己的端口和IP与套接字绑定

函数接口:htons、inet_addr、bind

3.接收消息

函数接口:recvfrom

 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);功能:接收信息参数:sockfd:套接字文件描述符buf:接收数据空间首地址len:接收数据长度flags:接收的属性 默认为0 src_addr:存放发送方地址空间的地址addrlen: 要接收的发送方地址的长度返回值:成功返回实际接收字节数失败返回-1 

三、总结

        2024年8月15日,学习的第29天。今天开始学习了Linux下的网络编程,主要学习了基础的网络知识以及UDP编程的实现。

        加油!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 力扣--最长公共前缀
  • C++ 对象构造语义学——局部对象、全局对象的构造和析构
  • MINIO图片地址浏览器打开不显示
  • python中的列表、元组、字典之间的区别
  • 刑法学学习笔记(个人向) Part.1
  • haproxy 7000字配图超详细教程 从小白到入门
  • docker知识点
  • https://ffmpeg.org/
  • 专业技能(挖坑填坑)——MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理
  • JVM垃圾回收算法有哪些
  • javaer快速入门 goweb框架 gin
  • 机械行业数字化生产供应链产品解决方案(十六)
  • 深度学习------------------卷积神经网络(LeNet)
  • 学习记录第二十八天
  • 中国软件评测中心:2024年最新人工智能大语言模型技术发展研究报告 (附文档)
  • django开发-定时任务的使用
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • input的行数自动增减
  • isset在php5.6-和php7.0+的一些差异
  • js操作时间(持续更新)
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Shell编程
  • TypeScript迭代器
  • Vue 重置组件到初始状态
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 力扣(LeetCode)357
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 驱动程序原理
  • 如何优雅地使用 Sublime Text
  • 物联网链路协议
  • 学习HTTP相关知识笔记
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Spring Batch JSON 支持
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #if和#ifdef区别
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (蓝桥杯每日一题)love
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)mysql使用Navicat 导出和导入数据库
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Core 2.1路线图
  • .net core 的缓存方案
  • .Net Core 生成管理员权限的应用程序
  • .net 连接达梦数据库开发环境部署
  • .net项目IIS、VS 附加进程调试
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [AIGC] 开源流程引擎哪个好,如何选型?