唐老师的网络编程
文章平均质量分 64
LangLang_2020
这个作者很懒,什么都没留下…
展开
-
应用协议解析模块(下)
应用协议解析模块(下)1、问题如何通过socket文件描述符实时解析协议消息?2、深度思考从文件描述符是否能够获取足够的数据?数据量足够读取12字节解析消息头读取数据填充payload(length)数据量不足无法获取消息头所需数据(如何处理?解析状态如何切换?)无法获取payload完整数据(如何处理?是否追加?)3、解决方案策略:尽力获取数据,实时解析即便当前获取1字节,也可根据状态进行解析支持不同数据源多次接力解析(从内存或文件描述符交替获取数据)原创 2021-12-31 11:44:49 · 222 阅读 · 0 评论 -
应用协议解析模块(上)
应用协议解析模块(上)1、问题如何在代码层面封装协议细节?如何将接收缓冲区中的数据解析成为Message?1.1深度思考数据是否能够解析成为Message?数据量足够如果数据量足够,是否能够解析不止一个Messge?如何处理剩余数据(属于下一个Message)?数据量不足是否达到协议最小长度(12字节)?如何处理数据量超过最小长度,但不足以创建一个Message的情况?2、初步解决方案定义一个模块用于从字节流解析Message可从指定内存或从指定文件描述符读取并原创 2021-12-31 11:44:06 · 123 阅读 · 0 评论 -
应用层协议的设计与实现
应用层协议的设计与实现1、问题2、小知识发送缓冲区数据先进入发送缓冲区,之后由操作系统送往远端主机接收缓冲区远端数据被操作系统收到后放入接收缓冲区之后应用程序从接收缓冲区读取数据3、TCP应用编程中“问题”数据接收端无法知道数据的发送方式4、网络编程中期望每次发送一条完整的消息,每次接收一条完整的消息及时接收缓冲区中有多条消息,也不会出现消息粘连消息中涵盖了数据类型和数据长度等信息5、应用层协议设计什么是协议?协议是通信双方为数据交换而建立的规则原创 2021-12-26 12:40:04 · 2268 阅读 · 0 评论 -
TCP与UDP
TCP与UDP1、TCP/IP分层结构2、TCP/IP分层结构应用层:各个应用程序可以定义(使用)各种各样的协议传输层:确保发出的数据能够到达目标主机,完成数据传输网络层:填写数据包地址,选择数据传递路径数据链路层:融合不同连接方式的链路,屏蔽网络差异物理层:具体连接方式:有线,无线,光纤…3、TCP/IP工作方式4、TCP/IP层次结构的特点上层依赖临近下层的能力,下层只为直接邻接上层服务上层不知道下层的工作机制,下层不管上层传输的数据内容不做跨层服务,层次结构中的角色原创 2021-12-26 12:38:58 · 835 阅读 · 0 评论 -
基于多路复用的服务端
基于多路复用的服务端1、目前服务端的瓶颈分析2、解决方案:阻塞变轮询通过select()函数首先监听服务端server_fd,目标事件为“连接”(读)当事件发生(客户端连接)则调用sccpet()接收连接将client_fd加入监听范围,目标事件为“数据接收”循环查看各个被监听的文件描述符是否有时间发生3、实现方式4、实现逻辑5、实现关键动态调整需要监视的文件描述符当接收到客户端连接时,将客户端文件描述符加入监听变量(fd_set)中当发现客户端断开时,在监听变量(fd原创 2021-12-26 12:38:20 · 1079 阅读 · 0 评论 -
尝鲜select多路复用
尝鲜select多路复用问题:如何增强服务端能力,同时支持多个客户端?Linux的设计哲学一切皆文件Linux中的文件是什么?狭义:文件系统中物理意义上的文件(逻辑上关联的数据集合)广义设备,管道,内存…Linux管理的一切对象理解文件描述符(File Descriptor)文件描述符是一个非负整数值,本质上一个句柄一切对用户(程序员)透明的资源标识都可以看做句柄用户使用文件描述符(句柄)与内核交互内核通过文件描述符操作对应资源的数据结构一切皆文件的原创 2021-12-26 12:37:30 · 759 阅读 · 0 评论 -
深入浅出IP地址
深入浅出IP地址问题:网络编程接口中一些参数的意义是什么?socke = socket(PF_INET, SOCK_STREAM, 0);socket参数详解int socket(int domain, int type, int protocol);参数意义domain套接字中使用的协议族信息type套接字数据传输类型信息protocol设备间通信使用的协议信息socket()中domain参数(协议族)PF_INET:IPv4互联网协议族PF原创 2021-12-26 12:33:02 · 1354 阅读 · 0 评论 -
CS模型的核心精要
CS模型的核心精要1、服务端编程初体验1.1、客户端/服务端编程模式服务端长期暴露网络,并等待客户端连接客户端发起连接动作,并等待服务端回应特点:服务端无法主动连接客户端客户端只能按照预定义的方式连接服务端1.2、服务端编程模式准备网络连接绑定端口进入端口监听状态等待连接1.3、服务端核心工作:绑定&监听&接收绑定int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen原创 2021-11-02 21:52:06 · 288 阅读 · 0 评论 -
网络编程核心概念与模式
网络编程核心概念与模式1、问题如何进行网络编程?2、网络编程的本质 使用操作系统提供的接口函数,使得应用程序具备收发网络数据的能力。网络接口在代码层面是操作系统提供的函数网络编程只是一系列系统函数的花式玩法应用程序通过网络接口使用操作系统的联网能力网络编程是特定领域的C语言程序设计3、网络编程核心概念协议:为进行数据通信而预定义的数据规则地址:网络通信中的用于标识设备的整数值端口号:设备为收发数据而指定的数值,用于标识具体连接可理解为:设备中用于网络通信的数原创 2021-11-02 11:41:27 · 292 阅读 · 0 评论