网络编程
文章平均质量分 70
网络编程
qq_52484093
这个作者很懒,什么都没留下…
展开
-
Http协议基础
Http 以 TCP 为底座,通过 C/S 模型与服务器进行通信Http 请求必然从客户端发出,服务器端响应请求后断开连接工作模式:请求响应且不保存状态Http 是基于文本的协议 (Http 协议细节具备可读性)原创 2022-12-26 17:40:58 · 396 阅读 · 1 评论 -
客户端服务端交互实现
与服务设备具体交互细节如何设计?服务模块如何获取真实环境信息?客户端业务逻辑如何实现?原创 2022-12-24 16:17:27 · 1316 阅读 · 3 评论 -
客户端设计与初步实现
Response Task 和 Service Task 的业务逻辑如何实现?每个服务设备在回复服务查询消息时,会附带服务地址;因此,记录服务命令与设备地址之间的映射关系。"Touch Lig_Set_On" 怎么知道给哪一个服务设备发送命令?服务设备能够将自身提供的服务信息及用法返回 (字符串描述)服务设备接收命令并匹配服务,并返回服务结果 (字符串描述)客户端业务逻辑如何实现?与服务设备具体交互细节如何设计?客户端根据收到的服务用法向设备发起请求 (字符串描述)客户端主动发起服务查询 (局域网广播)原创 2022-12-11 21:28:33 · 385 阅读 · 0 评论 -
智能家居服务发现实现
将网络通信框架移植到开发板,之后,可以使用框架中的组件实现 Response Task 和 Service Task。LWIP 是微型 TCP/IP 协议栈 (并非完整 TCP/IP 协议栈)socket 接口所在头文件不同于 Linux 和 Windows 平台。完成可移植性测试,对测试中出现的问题及时修复。支持 socket 接口,但一些功能未实现。通过网络调试助手验证 TCP 数据收发。通过网络调试助手验证 UDP 数据收发。原创 2022-12-11 11:04:31 · 542 阅读 · 0 评论 -
物联网设备WIFI模块实现
如何在设备上进行 Wifi 编程?LwIp 是轻量化的 TCP/IP,是一个小型开源的 TCP/IP 协议栈LwIp 的设计目标是用较少的资源实现较完整的 TCP/IP 协议栈LwIp 能在操作系统中运行,也能在无操作系统的情况下独立运行LwIp 提供了 Socket API 和 Netconn API支持 ARP,ICMP,IGMP支持 UDP,TCP,IP (可移植网络通信框架)支持 DNS,PPP,SNMP支持 DHCP,可动态分配 IP 地址 (WIFI 支持)BearPi-Nano 基于 Hi38原创 2022-12-04 22:12:46 · 2087 阅读 · 0 评论 -
分布式智能家居项目雏形
客户端进入室内后(局域网)能够主动发现服务(如: 环境服务,灯光服务)各种服务可以有不同的载体(如:由不同设备提供)各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)客户端可以是移动APP,也可以是桌面软件发现服务:UDP广播+自定义协议服务自定义增减提供服务的设备(嵌入式,服务器,PC,等)必须具备联网能力,且遵循服务协议 服务发现服务应答 通过广播服务发现数据包,收集当前环境的服务信息可用服务通过"菜单"方式呈现,并提示服务使用方式选择服务后,连接到对应设备,通过协议消息发送服务请求命令收到设备原创 2022-12-04 16:10:03 · 693 阅读 · 0 评论 -
网络通信框架的完善
因为 MParser_ReadFd(...) 会先读取缓冲区的12个字节作为头部信息,然后再去读取头部中所记录的字节长度,会读取两次,所以在第一次读取到12个字节数据后,这个数据报的剩余字节数据就读取不到了。所以采用先把数据报的内容读取到我们定义的缓冲区中,然后再去通过我们定义的缓冲区去解析它,以间接的方式来获取 Message。由于 UdpPoint 封装了 socket 文件描述符的细节,所以需要对外提供改变 socket 属性的接口函数,以便用户使用广播和多播以及其他的功能。...原创 2022-08-14 20:53:25 · 626 阅读 · 0 评论 -
深入UDP数据收发(下)
在实际项目中,因为多播数据的接收方和发送方可能不在同一个网络下,所以需要设置TTL,并且如果一个主机有多个网卡,最好直接指定好接收多播数据的IP地址,否则操作系统就会随机选择一个IP地址作为接收多播数据的地址,导致多播数据可能就接收不到了。发送多播数据的方式,与发送普通 UDP 数据的方式相同。"加入多播组" 可理解为 UDP 网络程序进行的申请。因此,必须设置多播数据的最多转发次数 (TTL)加入同一个多播组的主机不一定在同一个网络。传输数据的方法,多播也称之为组播。...原创 2022-08-12 23:07:51 · 814 阅读 · 0 评论 -
深入UDP收发数据(上)
本地主机想要获取 IP 地址,首先会在本地广播一个数据包,源IP地址为0.0.0.0,目标IP地址为255.255.255.255,DHCP 服务器收到此数据包后,会回复本地主机;本地主机获取到的 IP 地址是有期限的,快到期限的时候,本地主机会继续广播,请求继续使用此 IP 地址。DHCP (动态主机配置协议) 是一个局域网的网络协议 (基于 UDP 协议)socket 属性的改变可造成 socket 数据收发行为的改变。socket 本身有各种属性 (不同的连接,属性可能不同).........原创 2022-08-11 22:29:03 · 697 阅读 · 0 评论 -
UDP数据收发实战
问题如何使用 UDP 进行数据收发?再论 UDP 协议UDP 是无连接的 (不可靠的,无应答消息,数据包无序号标识)UDP 是面向数据包的,对应用层数据既不合并也不拆分 (保留数据包边界)UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低UDP 支持一对一、一对多、多对一和多对多的交互通信UDP 消息头开销小,只有 8 个字节 (TCP 消息头共 20 个字节)UDP 和 IP 的区别UDP 是建立于 IP 之上的数据传输协议IP 负责将 UDP原创 2022-02-23 12:24:00 · 582 阅读 · 0 评论 -
数据收发的拓展用法
问题write() 和 send() 都可以发送数据,有什么区别?read() 和 recv() 都可以接收数据,有什么区别?send() 和 recv() 比 write() 和 read() 多了一个 flags 参数,用于描述收发网络数据时的选项数据收发选项flags - 收发数据时指定的可选项信息当调用 send()、recv() 函数,将 flags 参数指定为 0 时:调用 send() 函数时,首先查看发送缓冲区的数据是否被发送出去了,等发送缓冲区的数据都原创 2022-02-03 12:50:09 · 1496 阅读 · 0 评论 -
TCP通信框架:服务端设计
问题如何设计与客户端相对应的服务端?TCP 通信框架设计服务端负责监听连接状态Connect:产生通信客户端 (TcpClient),并给出事件通知 Close:给出事件通知,并销毁通信客户端负责监听数据通信状态,并给出事件通知服务端事件设计EVT_CONN客户端连接服务端时触发,并创建 TcpClient 用于通信EVT_DATA客户端数据到达服务端时触发,使用 TcpClient 读取数据EVT_CLOSE客户端断开服务端时触发,相关 Tc原创 2022-01-23 15:49:25 · 624 阅读 · 0 评论 -
TCP通信框架:客户端设计
问题有了协议和协议解析器之后,可以干嘛?TCP 通信框架设计客户端:以协议消息为基本单位收发数据 同时支持字节为基本单位收发数据服务端负责监听连接,并产生通信客户端 负责监听数据通信状态,并给出通知职责定义客户端用于进行实际的双向数据通信数据发送 & 数据接收 (协议消息)服务端仅用于监听和回调通知事件类型:连接,数据,断开 事件回调:void(*Listener) (TcpClient* client,int event)客户端接口原创 2022-01-22 13:11:50 · 372 阅读 · 0 评论 -
应用层协议解析模块
问题如何在代码层面封装协议细节?如何接收缓冲区中的数据解析成为 Message?深度思考初步的解决方案定义一个模块用于字节流解析 Message可 从指定内存 或 从指定文件描述符 读取并解析当至少存在12个字节时开始解析1. 首先解析协议中的头信息和数据区长度 (length) 2. 根据数据区长度继续从字节流读取数据 (payload) 3. 当协议数据解析完成时,创建 Message 并返回,否则,返回 NULL协议解析模块的初步设计解析器原创 2022-01-20 11:42:40 · 460 阅读 · 0 评论 -
应用层协议设计与实现
问题下面的代码输出什么?为什么?Receive: ABC因为 TCP 是流式传输协议,它将应用层的数据以字节流的形式一个一个字节传入自己的缓冲区,然后再发送,接收端 recv 后,把收到的数据放入接收缓冲区,再把接收缓冲区的数据拷贝到 buf 中,所以我们读到的是一连串粘连的数据,这就是 TCP 的粘包现象。小知识发送缓冲区数据先进入发送缓冲区,之后由操作系统送往远端主机接收缓冲区远端的数据被操作系统接收后,放入接收缓冲区 之后应用程序从接收缓冲区读取数据T原创 2022-01-19 11:15:13 · 1101 阅读 · 0 评论 -
TCP与UDP
TCP / IP 分层结构应用层:各个应用程序可以定义 (使用) 各种各样的协议传输层:确保发出的数据能够到达目标主机,完成数据传输网络层:填写数据包地址,选择数据传输路径数据链路层:融合不同连接方式的链路,屏蔽网络差异物理层:具体连接方式:有线,无线,光纤,。。。TCP / IP 工作方式TCP / IP 层次结构的特点上层依赖邻接下层的能力,下层只为邻接上层服务上层不知道下层的工作机制,下层不管上层传输的数据内容不做跨层服务,层次结构中的角色缺一.原创 2022-01-18 13:28:13 · 374 阅读 · 0 评论 -
Windows下的网络编程
socket 接口已普遍存在于现代操作系统中Windows 下的 socket 编程接口与 Linux 中几乎相同不同之处返回值类型不同 (句柄类型) 句柄不是文件描述符,Windows 中并不是一切皆文件Windows 下 socket() 的用法Windows 网络编程接口几点细微差异通过 WSAStartup() 初始化系统环境 (最先调用)socket(),accept() 错误返回 INVALID_SOCKET (不可默认为 -1)bin..原创 2022-01-17 11:34:47 · 1687 阅读 · 0 评论 -
基于多路复用的服务端
问题使用 select() 函数可以拓展服务端功能吗?如果可以,具体怎么实现?目前服务端的瓶颈分析解决方案通过 select() 函数,首先监听服务端 server_fd,目标事件为 "连接" (读)当事件发生 (客户端连接),则调用 accept() 接受连接将 client_fd 加入监听范围,目标事件为 "数据接收" (读)循环查看各个被监听的文件描述符是否有事件发生实现方式实现逻辑实现关键动态调整需要监视的文件描述符当接..原创 2022-01-16 15:59:24 · 80 阅读 · 0 评论 -
尝鲜select多路复用
问题如何增强服务端能力,同时支持多个客户端?Linux 的设计哲学一切皆文件!!!Linux 中的文件是什么?狭义:文件系统中物理意义上的文件 (逻辑上关联的数据集合)广义:设备,管道,内存。。。 Linux 管理的一切对象理解文件描述符 (File Descriptor)文件描述符是一个非负整数值,本质是一个资源一切对用户 (程序员) 透明的资源标识都可以看作句柄用户使用文件描述符 (句柄) 与内核交互内核通过文件描述符操作对应资源的数据结构原创 2022-01-15 19:01:06 · 100 阅读 · 0 评论 -
深入浅出IP地址
问题网络编程接口中一些参数的意义是什么?socket 参数详解socket() 中的 domain 参数 (协议族)socket() 中的 type 和 protocal 参数type:用于指定协议类型SOCK_STREAM:流式数据 (TCP) SOCK_DGRAM:报文式数据 (UDP)protocal:用于指定协议族中符合类型的具体协议domain 和 type 几乎可以唯一确定一种协议,因此,这个参数通常为0 即:0代表 domain 和..原创 2022-01-14 15:47:49 · 246 阅读 · 0 评论 -
服务端编程初体验
客户端 / 服务器 编程模式服务端长期暴露于网络,并等待客户端连接客户端发起连接动作,并等待服务端回应特点:服务端无法主动连接客户端 客户端只能按照预定义的方式连接服务端服务端编程模式1. 准备网络连接2. 绑定端口3. 进入端口监听状态4. 等待连接服务端核心工作:绑定 & 监听 & 接收深度剖析服务端服务端 socket 只用于接收连接,不进行实际通信当接收到连接时,accept() 函数返回与客户端通信的 socke.原创 2022-01-13 13:55:10 · 100 阅读 · 0 评论 -
网络编程核心概念与模式
问题如何进行网络编程?网络编程的本质使用操作系统提供的接口函数,使应用程序具备收发网络数据的能力。应用程序想要收发网络数据就得通过网卡,而应用程序不能直接操作硬件,所以需要使用操作系统提供的网络接口,让内核去收发网络数据。网络接口在代码层面是操作系统提供的函数网络编程只是一系列系统函数的花式玩法应用程序通过网络接口使用操作系统的联网能力网络编程是特定领域的 C 语言程序设计网络编程核心概念协议:为进行数据通信而预定义的数据规则地址:网络通信中的用于标识原创 2022-01-12 13:05:05 · 151 阅读 · 0 评论
分享