《Linux网络开发必学教程》31_文件服务器最终实现

2023-06-10
阅读 3 分钟
1.1k
问题: # favicon.ico 简介 是什么?请求如何处理?favicon.ico 简介favicon.ico 是网页上的图标文件名称:默认名称位 favicon.ico尺寸:16x16、32x32、48x48、64x64、128x128颜色: 8 位、24 位 或 32 位一般说,在网页中可以通过 HTML 语句设置图标文件<link rel="shortcut icon" href="/favicon.ico...

《Linux网络开发必学教程》30_文件浏览交互涉及

2023-06-08
阅读 9 分钟
888
问题:浏览器与文件服务器如何交互?浏览器与文件服务器的交互文件浏览点击列表中的文件夹 → 进入子文件夹(展示子文件夹列表)文件下载点击列表中的文件 → 下载目标文件错误处理向服务器发送错误请求 → 浏览不存在的文件夹 / 下载不存在的文件文件浏览交互实现实现中的关键概念共享文件夹(root)服务端启动时指定的共...

《Linux网络开发必学教程》29_动态创建交互页面

2023-06-05
阅读 7 分钟
1.1k
问题:如何创建浏览器中的文件展示页面?再论前端页面交互页面分析静态部分表格,页面结构动态部分文件浏览路径 (Path)文件列表(Table) {代码...} 文件列表分析静态表格标题行表格列表结构动态部分表格行数据 {代码...} 文件列表接口函数及数据结构Table *CreateTable();Table *InsertRow(Table *table, RowInfo *info...

《Linux网络开发必学教程》28_浏览器请求响应实现

2023-06-04
阅读 7 分钟
904
文件服务器架构职责定义主线程命令行输入,管理员可控制服务端工作状态监听线程服务端启动后对客户端连接进行监听的工作环境通讯线程客户端连接成功后与服务端的数据交互环境主线程 {代码...} {代码...} 交互流程一交互流程二监护线程 {代码...} 请求响应流程通讯流程 {代码...} 编程实验:实现请求响应main.c {代码...}...

《Linux网络开发必学教程》27_文件服务器可行性分析

2023-06-04
阅读 8 分钟
860
需求分析服务端启动时指定某本地文件夹作为网络共享文件夹共享文件夹中的所有文件及子文件夹均可被客户端访问使用浏览器作为客户端,在浏览器中可“看到”所有共享文件用户可在浏览器中将目标文件下载到本地服务端可暂定服务,但不影响正在下载目标文件的客户端技术可行性分析服务端网络通讯基于 Http 协议与客户端浏览器...

《Linux网络开发必学教程》26_Web 前端开发基础

2023-06-04
阅读 4 分钟
814
关于 Http 应用程序基于 Http 的应用程序本质上是一种特殊的 C/S 模型应用Http 应用程序的底座是 TCP 协议(即:socket 可完成应用)常见的 Http 客户端为浏览器,服务端为 Web 服务器简单理解:Http 应用程序 ←→ TCP 应用程序 + 文本处理应用程序值得思考的问题浏览器为什么能成为 “万能客户端” ?什么是 HTML ?HTML ...

《Linux网络开发必学教程》25_Http 协议基础

2023-06-03
阅读 2 分钟
1.2k
Http 是什么?Http 作为 WWW 的重要组成部分被提出(World Wide web)而当时的 WWW 是为了帮助研究者更好的进行知识共享基本理念:文档之间的相互关联形成超文本,最终连城相互参阅的 WWWHttp (Hyper Text Transfer Protocol)用于定义文档之间如何跳转,即:文档传输协议Http 是什么?Http 是位于 TCP/IP 之上的应用层通...

《Linux网络开发必学教程》24_物联网服务模块实现(非必要)

2023-06-03
阅读 2 分钟
1.1k
笔者无对应硬件开发板,对涉及硬件操作部分的代码不做全部展开。(不影响主线理解)问题:服务模块如何获取真实环境信息?外设简介设备驱动开发基础GPIOGPIO 即: General-Purpose Input/Output, 通用型输入输出在硬件设备上,GPIO 通常表现为引脚 (Pin), 输出为高电平或低电平程序设计中,可通过代码控制指定 GPIO 的...

《Linux网络开发必学教程》23_客户端服务端交互实现

2023-06-03
阅读 3 分钟
794
问题:客户端业务逻辑如何实现?与服务设备交互细节如何设计?客户端业务逻辑实现用户输入处理字符串空格处理,分割获取命令与参数服务信息处理字符串预处理,分割获取服务命令存储服务命令与设备地址之间的映射(命令字符串 👉 地址字符串)客户端业务逻辑实现 - 用户输入处理 {代码...} {代码...} {代码...} 服务端逻辑...

《Linux网络开发必学教程》22_客户端设计与初步实现

2023-05-30
阅读 6 分钟
483
问题:Response Task 和 Server Task 的业务逻辑如何实现?客户端如何实现?再论交互流程交互详细设计(Message::payload)客户端主动发起服务查询(局域广播)服务设备将自身能提供的服务信息及用法返回(字符串描述)客户端根据收到的服务用法向设备发起请求(字符串描述)服务设备接收命令并匹配服务,并返回服务结果...

《Linux网络开发必学教程》21_智能家居服务发现实现

2023-05-30
阅读 5 分钟
608
服务设备软件代码复用将网络通讯框架移植到开发板,之后,可使用框架中的组件实现 Response Task 和 Server Task框架移植注意事项Lwip 是微型 TCP/IP 协议栈 (并非完整 TCP/IP协议栈)支持 socket 接口,但一些功能未实现socket 接口所在头文件不同于 Linux 和 Window 平台完成可执行测试,对测试中出现的问题及时修复...

《Linux网络开发必学教程》20_物联网设备 WIFI 模块实现(非必要)

2023-05-28
阅读 7 分钟
774
问题:如何在设备上进行 WIFI 编程?Lwip (Light weight IP) 简介Lwip 是轻量化的TCP/IP,是一个小型开源的 TCP/IP 协议栈LwIP 的设计目标是用较少的资源实现完成的 TCP/IP 协议栈Lwip 能在操作系统中运行,也能在无操作系统的情况下独立运行Lwip 提供了 Socket API 和 Netconn APILwip 的主要特性支持 ARP, ICMP, IGMP...

《Linux网络开发必学教程》19_分布式智能家居项目雏形

2023-05-23
阅读 3 分钟
955
需求分析客户端进入室内后能够主动发现服务(如,环境服务,灯光服务)各种服务可以有不同的载体(如:由不同设备提供)各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)客户端可以是移动 APP ,可以是桌面软件 。。。技术可行性分析发现服务: UDP 广播 + 自定义协议客户端主动广播服务查询协议包服务设备...

《Linux网络开发必学教程》18_网络通讯框架的完善

2022-05-12
阅读 8 分钟
953
问题:如何扩展之前的通信框架,使其支持 UDP 通信,进而成为一个完善的网络通讯框架?UDP 通讯扩展UDP 通信实体概要设计每个 UDP Point 地位对等(因为不必主动发起连接),可通过 ip 地址和 port 号进行通讯UDP Point 数据收发单位为: Message 或 Byte在接受口设计上,与 TcpClient 保持一致(框架接口一致性)目标:...

《Linux网络开发必学教程》17_深入 UDP 数据收发 (下)

2022-05-10
阅读 5 分钟
1.3k
问题: UDP 是否还有其他一对多的数据发送方式?UDP 通讯中的多播多播是向特定组中的所有主机传输数据的方法,多播也称之为组播多播数据传输的特点:多播发送者针对特定的多播组,只发送 1 次数据,组内主机均可接收到数据主机加入特定组,即可接收该组中的多播数据多播组可在 IP 地址范围内任意添加关键问题:如何收发...

《Linux网络开发必学教程》16_深入 UDP 数据收发 (上)

2022-05-09
阅读 4 分钟
1.1k
问题:如何进行一对多的 UDP 数据发送?UDP 通讯中的广播广播是向同一网络中的所有主机传输数据的方法广播类型直接广播:IP 地址中除网络地址外,其余主机地址均设置为 1本地广播:无需知道网络,使用 255.255.255.255 作为 IP 地址使用区别本地广播数据不经过路由器寻址,直接发送到本地主机本地广播应用案例:DHCPDHCP...

《Linux网络开发必学教程》15_UDP 数据收发实战

2022-05-09
阅读 4 分钟
892
问题:如何使用 UDP 进行数据收发?再论 UDP 协议UDP 是无连接的(不可靠的,无应答消息,数据包无序号标识)UDP 是面向数据包的,对应用层数据既不合并也不拆分(保留数据包边界)UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低UDP 支持一对一,一对多,多对一和多对多的交互通信UDP 消息头开销小,只有 ...

《Linux网络开发必学教程》14_数据收发的扩展用法 (下)

2022-05-08
阅读 13 分钟
1.1k
MSG_PEEK (数据窥探)使用 MSG_PEEK 选项能够获取接收缓冲区数据的拷贝recv() 专用选项,可用于数据预接收指定 MSG_PEEK 选项时,不会清空缓冲区可用于获取接收缓冲区种的数据量(字节数)当接收缓冲区中没有数据时,MSG_PEEK 也会导致线程阻塞下面的代码输出什么?为什么? {代码...} client.c {代码...} server.c {代...

《Linux网络开发必学教程》13_数据收发的扩展用法 (上)

2022-05-07
阅读 8 分钟
1.1k
write() 和 send() 都可以收发数据,有什么区别?send 可以使用 flags 指定可选项信息,其中 0 表示默认发送行为send 当 flags 为 0 时,会等待发送缓冲区数据清空之后才将数据放入发送缓冲器然后返回write 不能指定可选项信息,同时不会阻塞read() 和 recv() 都可以接收数据,有什么区别?recv 可以使用 flags 指定可选...

《Linux网络开发必学教程》12_TCP通讯框架:服务端设计

2022-05-05
阅读 7 分钟
1.1k
问题:如何设计与客户端对应的服务端?TCP 通信框架设计服务端负责监听连接状态Connect : 产生通讯客户端(TcpClient), 并给出事件通知Close : 给出事件通知,并销毁客户端负责监听数据通信状态,并给出事件通知服务端事件设计EVT_CONN: 客户端连接服务端时触发,并创建 TcpClient 用于通信EVT_DATA: 客户端数据到达服务...

《Linux网络开发必学教程》11_TCP通讯框架:客户端设计

2022-05-04
阅读 12 分钟
846
问题:有了协议和协议解析器之后,可以干嘛?TCP 通讯框架设计客户端以协议消息为基本单位收发数据同时支持字节为基本单位收发数据服务端负责监听链接,并产生通讯客户端负责监听数据通讯状态,并给出通知职责意义客户端用于进行实际的双向数据通信数据发送 & 数据接收 (协议消息)服务端仅用于监听和回调通知事件类型...

《Linux网络开发必学教程》10_应用协议解析模块(下)

2022-05-04
阅读 12 分钟
1k
问题:如何通过 socket 文件描述符实时解析协议数据?深度思考从文件描述符是否能够获取足够的数据?(是否一定等到数量足够(如:消息头12字节),才能开始解析)数据量足够读取 12 字节解析消息头读取数据填充 payload (length)数据量不足无法获取消息头所需数据(如何处理?解析状态如何切换?)无法获取 payload 完...

《Linux网络开发必学教程》9_应用协议解析模块(上)

2022-05-03
阅读 5 分钟
1k
问题:如何在代码层面封装协议细节?如何将接收缓冲区中的数据解析为 Message ?深度思考数据是否能够解析成为 Message ?数据量足够如果数据量足够,是否能够解析不止一个 Message?如何处理剩余数据 (属于下一个 Message)数据量不足是否达到协议最小长度(12 字节)?如何处理数据量超过最小长度,但不足以创建一个 Mes...

《Linux网络开发必学教程》8_应用协议设计与实现

2022-04-29
阅读 6 分钟
1k
问题:下面的代码输出什么?为什么? {代码...} {代码...} 完整代码 client.c {代码...} 完整代码:server.c {代码...} 输出 {代码...} 小知识发送缓冲区数据先进入发送缓冲区,之后由操作系统送往远端主机接收缓冲区远端数据被操作系统接受后放入接收缓冲区之后应用程序从接收缓冲区读取数据TCP 应用编程中的 “问题”数...

《Linux网络开发必学教程》7_TCP 与 UDP

2022-04-28
阅读 3 分钟
1.2k
TCP/IP 分层结构应用层:各个应用程序可以定义(使用)各种这样的协议传输层:确保发出的数据能够达到目标主机,完成数据传输网络层:填写数据包地址,选择数据传输路径数据链路层:融合不同连接方式的链路,屏蔽网络差异物理层:具体连接方式,有线,无线,光纤...TCP/IP 工作方式TCP/IP层次结构的特点上层依赖邻接下层...

《Linux网络开发必学教程》6_Window 下的网络编程

2022-04-28
阅读 8 分钟
1k
socket 接口已普遍存在于现代操作系统中Windows 下的 socket 编程接口与 Linux 中几乎相同不同之处返回类型不同(句柄类型)句柄不是文件描述符,Window 中并不是一切接文件 (因此 windows 下对于 socket 无法使用 send、recv)Windows 下 socket() 的用法 {代码...} Windows 网络编程接口#include <winsock2.h>...

《Linux网络开发必学教程》5_基于多路复用的服务端

2022-04-27
阅读 4 分钟
837
问题:使用 select() 函数可以扩展服务端功能吗? 如果可以,具体怎么实现?目前服务端的瓶颈分析服务端大多数时候处于等待状态,无法发挥主机(设备)的最大性能 {代码...} 解决方案:阻塞变轮询通过 select() 函数首先监听服务端 server_fd, 目标事件为 “连接”(读)当事件发生(客户端连接),则调用 accept() 接受连...

《Linux网络开发必学教程》4_尝鲜 seclect 多路复用

2022-04-26
阅读 3 分钟
1.2k
问题:如何增强服务端能力,同时支持多个客户端?Linux 的设计哲学:一切皆文件Linux 中的文件是什么?侠义:文件系统中物理意义上的文件(逻辑上关联的数据集合)广义:设备,通道,内存,。。。Linux 管理的一切对象理解文件描述符文件描述符是一个非负整数,本质是一个句柄一切对用户(程序员)透明的资源标识都可以...

《Linux网络开发必学教程》3_深入浅出 IP 地址

2022-04-25
阅读 4 分钟
1.1k
问题:网络编程接口中一些参数的意义是什么? {代码...} socket 参数详解int socket(int domain, int type, int protocal);参数意义domain套接字中使用的协议族信息type套接字数据传输类型信息prorocol设备间通讯使用的协议信息socket() 中的 domain 参数(协议族)PF_INET → IPv4 互联网协议族PF_INET6 → IPv6 互联网协...

《Linux网络开发必学教程》2_服务端编程初体验

2022-04-25
阅读 5 分钟
1k
客户端/服务端 编程模式服务端长期保留于网络(公开自己的 IP 地址),并等待客户端连接客户端发起连接动作,并等待服务端回应特点:服务端无法主动连接客户端客户端只能按照预定义的方式(协议)连接服务端服务端编程模式 {代码...} 服务端核心工作:绑定 & 监听 & 接收绑定:int bind(int sock, struct sockaddr *addr...