跨平台(windows+linux)的线程辅助程序,跨平台(Windows+Linux)的Socket通讯程序(二)—结构...

上一篇"跨平台(Windows+Linux)的Socket通讯程序"给出了Socket通讯底层的一些函数的包装方法/类,同时屏蔽了操作系统(Windows/Linux)的不同。

上一篇只是对通讯底层方法的封装,并没用涉及应用,这一篇将基于上一篇,并结合"跨平台(Windows+Linux)的线程辅助程序",讨论一个实用化的Socket通讯程序的体系结构。

一、结构图

下面给出了一个Socket通讯应用的大致体系结构图。

1333267638_4488.JPG

图中,给出了一些概念类和它们所处的层次,大致上,分为三个处理层次以及一个辅助层次。

底层封装函数:这个层次的内容在(一)中已论述,主要是对Socket原生函数的封装,之所以既有CSocketWrap类,又有独立的辅助函数,是考虑到一般性与特殊性兼顾,对通常的通讯逻辑,可在CSocketWrap类中处理,对特殊的要求,可直接调用底层的封装函数。

通用的Server和Client层:因为Server端与Client端通讯逻辑不同,宜采用两个类分别处理,本文没有将UDP与TCP协议分开,如果逻辑要更清晰一些,也可以写成4个类。

以上两层都未涉及业务逻辑,完成的是通用的通讯功能,发送或接收函数“看到”的是“数据流”或“数据包”,而忽视其意义。最核心的功能函数有3个:发送函数、接收函数、通讯失败判断函数,通常情况下,发送、接收函数都是采用非阻塞方式,通讯失败函数被更上层的业务逻辑层所调用,有助于判断是否需要重发、继续保持连接等业务逻辑。

业务逻辑层:该层完成通讯的业务逻辑,每个应用都会有所不同,这里分了4个类,每个类都将包含一个协议封装/解析类,用于无意义的“数据流”或“数据包”与有意义的“数据结构”之间的转换。

协议解析/封装层:该层实际上不属于通讯程序本身,是对外通讯协议与对内通讯协议之间的转换。对外的通讯协议格式与应用内部使用的数据格式通常是不同的,需要两个类分别进行转换。

对通讯协议的解析,UDP与TCP一般情况下是不同的(见(一)中UDP与TCP的区别)。对于比较复杂的协议,协议解析/封装类可能有多个,本文只是示意性的给出一个。关于通讯协议的解析和封装,这里不做介绍。

二、一些讨论

1.数据的发送与接收宜与业务逻辑分开,这样就可以编写一个较为通用的发送与接收过程类(业务逻辑一般不能通用),要做到这点,比较合适的做法是采用非阻塞的发送与接收函数,并且将发送与接收过程放到单独的一个线程中,通过线程间信息共享,与业务线程传递要发送与接收的数据。

2.实际上,通用Server/Client层完成的是Socket的“业务”,如果采用多线程,宜在这一层完成,上面的业务层只需调用这一层的发送或接收方法即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据的“敏捷制造”,DataWorks一站式数据开发治理范式演进

简介: 企业大数据技术发展至今,历经了两次蜕变。第一次蜕变从最初的“小作坊”解决大数据问题,到后来企业用各类大数据技术搭建起属于自己的“大平台”,通过平台化的能力完成数据生产力的升级。 第二次蜕变让大数据从“大平台”向…

全新的 Fragment 通信方式

作者 | tech-bus.丹卿来源 | 程序员巴士前言就在前段时间,Google 推出了 Fragment Result API 和 Activity Results API,用来取代之前的 Activity 和 Fragment 之间通信方式的不足,大家可以前往看看都有哪些更新:https://medium.c…

数据传输完整性_电缆监测数据传输系统分析与设计

电缆线路是重要的输电方式,对电缆线路进行监测是保证电缆线路正常工作的重要的条件,研究人员利用嵌入式系统设计了电缆监测数据传输系统。该系统以CAN通信和嵌入式以太网络技术为核心,实现了对电缆及其沟道的实时监测、状态显示及预报警功能&…

大型企业多账号管理“安全心法”

简介: 云上多账号环境下的网络统一管理,是大型分支型企业网络安全防护的必经之路。无论是外企入华、国内企业出海,还是本土集团型企业规模化成长,云上统一网络安全管控与整体安全态势感知,都可以拉齐企业账号间安全水位…

苹果将于 2025 年推出的 Apple Car 长什么样?

整理 | 孙胜出品 | CSDN(ID:CSDNnews)据国外媒体报道,苹果公司预计将于2025年推出一款全新的自动驾驶汽车,旨在实现真正意义上的无人驾驶。报道称,基于自动驾驶的理念,苹果理想的汽车没有方向盘…

阿里云中间件首席架构师李小平:云原生实践助力企业高效创新

简介: 通过云原生技术,真正为企业带来更多的业务价值,助力企业整体的业务创新。 作者:李小平 前天我参加了信通院的云原生产业大会,在会场上非常感慨,参加会议的企业非常多,并且来自于各行各业…

ubuntu linux固定ip设置,Ubuntu 配置静态IP

Ubuntu是属于Debian系衍生的发行版目录结构和RedHat系Linux发行版有所不同,但个人认为RedHat系的目录结构会更加接近Unix风格,相对这些各种Linux发行版遇到不懂的还是先查查手册Wiki,虽然我玩过很多发行版比如Opensuse,Linux mint,elementary os,Puppy L…

cv曲线面积的意义_几何直觉的魅力:sinx曲线下的面积原理是如此的美妙

用“曲线下的面积”来描述积分,就像用一串单词来描述一本书。正弦函数的积分是其曲线下的面积。几何直觉就是:“正弦的积分是沿圆周路径的水平距离。”这句话第一次听说感觉比较抽象,当你理解了就会觉得它非常的美妙一般的思维模式求正弦函数的积分就是&…

OpenInfra 十一年:OpenStack 部署规模超 2500 万计算核心

后疫情时代下,产生海量在线需求,越来越多金融、政府、教育、通信和医疗保健等上云业务需依赖现代云基础设施来正常运行。其中开源提供了一种更具成本效益的开发方式,据最新《2021 年度 Octoverse 报告》显示,2021 年 GitHub 开发者…

集群镜像:实现高效的分布式应用交付

简介: Docker 解决了单个容器的镜像化问题,而 sealer 通过把整个集群打包,实现了分布式软件的 Build Share Run。 作者 | fanux.中弈 什么是集群镜像 顾名思义,和操作系统 .iso 镜像或 Docker 镜像类似,集群镜像是用一…

python 图例颜色_python – 来自颜色字典的matplotlib.pyplot scatterplot图例

实现这一目标的一种方法:D_id_color {A: uorchid, B: udarkcyan, C: ugrey, D: udodgerblue, E: uturquoise, F: udarkviolet}x_coordinates [1,2,3,4,5,6] # Added missing datapointy_coordinates [3,3,3,3,3,3] # Added missing datapointsize_map [50,100,2…

linux远程执行迷路,linux操作系统基础

Linux的基本原则1.由目的单一的小程序组成:组合小程序完成复杂任务2.一切皆文件3.尽量避免捕获用户接口4.配置文件保存为纯文本格式linux操作系统基础及常用命令在bash下一般管理员是#号,其他用户是$命令:命令 选项 参数选项:是用…

uni app input添加获取验证码按钮_uni-app跨平台框架对微信小程序的无障碍支持探索...

uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。今天,我们来体验uni-app对微信小程序的无障…

比开源快30倍的自研SQL Parser设计与实践

简介: SQL作为一种领域语言,最早用于关系型数据库,方便管理结构化数据;SQL由多种不同的类型的语言组成,包括数据定义语言,数据控制语言、数据操作语言;各数据库产品都有不同的声明和实现&#x…

SLS控制台内嵌操作指南

简介: SLS控制台内嵌操作指南 一、机制 详见:https://help.aliyun.com/document_detail/74971.html 二、操作 2.1 子账号操作(主账号身份操作) 登陆ram控制台,创建子账号。给子账号授予AliyunSTSAssumeRoleAccess权…

python vlookup 模糊_如何用python写excel中的vlookup函数?

1.背景Vlookup 函数,可以算是一个数据专员必须要会使用的基本函数了,确实很好用。但是你可能会注意到,Excel 一旦数据量过大,打开都费劲了,何况打开后,你还要输入公式计算,就更费劲了&#xff0…

装linux服务器进去配置界面,在CentOS 8 Linux上安装和配置SuiteCRM的步骤

本文介绍在CentOS 8 Linux服务器上安装和配置SuiteCRM的详细步骤:更新系统、安装PHP、安装MariaDB和Nginx Web服务器、安装SuiteCRM、配置SuiteCRM Web访问界面。SuiteCRM是由SalesAgility团队开发和维护的开源企业级CRM应用程序,该产品最初是SugarCRM社…

Dev Lake 0.4.0 版本:开源、开放的研发效能数据平台

建设研发工具链后,效能提升如何更进一步? 工程师们反馈流程体验确实有所提升,和业务同事的沟通似乎也愉快了一些——但研发团队依然需要量化数据作为抓手,一方面佐证先前实践优化的有效性,另一方面为持续的效能提升寻找…

tensorflow图形识别_手把手教你使用TF服务将TensorFlow模型部署到生产环境

摘要: 训练好的模型不知道如何布置到生产环境?快来学习一下吧!介绍将机器学习(ML)模型应用于生产环境已成为一个火热的的话题,许多框架提供了旨在解决此问题的不同解决方案。为解决这一问题,谷歌发布了TensorFlow(TF)服务&#xf…

一文读懂 - 云上用户如何灵活应用定制化网络服务

简介: 在将传统数据中心业务迁移上云的过程中,如何将云下基于不同业务场景和设备角色灵活变化的网络配置基于云上网络统一服务能力进行转换,用户及其业务架构通常会面临诸多的挑战。阿里云混合云网络技术团队和阿里云网络产品团队自主创新研发…