网站有什么组成,谷歌广告联盟,河北承德网,怎样做建网站做淘客上一篇跨平台(WindowsLinux)的Socket通讯程序给出了Socket通讯底层的一些函数的包装方法/类#xff0c;同时屏蔽了操作系统(Windows/Linux)的不同。上一篇只是对通讯底层方法的封装#xff0c;并没用涉及应用#xff0c;这一篇将基于上一篇#xff0c;并结合跨平台(WindowsLinux)的Socket通讯程序给出了Socket通讯底层的一些函数的包装方法/类同时屏蔽了操作系统(Windows/Linux)的不同。上一篇只是对通讯底层方法的封装并没用涉及应用这一篇将基于上一篇并结合跨平台(WindowsLinux)的线程辅助程序讨论一个实用化的Socket通讯程序的体系结构。一、结构图下面给出了一个Socket通讯应用的大致体系结构图。图中给出了一些概念类和它们所处的层次大致上分为三个处理层次以及一个辅助层次。底层封装函数这个层次的内容在(一)中已论述主要是对Socket原生函数的封装之所以既有CSocketWrap类又有独立的辅助函数是考虑到一般性与特殊性兼顾对通常的通讯逻辑可在CSocketWrap类中处理对特殊的要求可直接调用底层的封装函数。通用的Server和Client层因为Server端与Client端通讯逻辑不同宜采用两个类分别处理本文没有将UDP与TCP协议分开如果逻辑要更清晰一些也可以写成4个类。以上两层都未涉及业务逻辑完成的是通用的通讯功能发送或接收函数“看到”的是“数据流”或“数据包”而忽视其意义。最核心的功能函数有3个发送函数、接收函数、通讯失败判断函数通常情况下发送、接收函数都是采用非阻塞方式通讯失败函数被更上层的业务逻辑层所调用有助于判断是否需要重发、继续保持连接等业务逻辑。业务逻辑层该层完成通讯的业务逻辑每个应用都会有所不同这里分了4个类每个类都将包含一个协议封装/解析类用于无意义的“数据流”或“数据包”与有意义的“数据结构”之间的转换。协议解析/封装层该层实际上不属于通讯程序本身是对外通讯协议与对内通讯协议之间的转换。对外的通讯协议格式与应用内部使用的数据格式通常是不同的需要两个类分别进行转换。对通讯协议的解析UDP与TCP一般情况下是不同的(见(一)中UDP与TCP的区别)。对于比较复杂的协议协议解析/封装类可能有多个本文只是示意性的给出一个。关于通讯协议的解析和封装这里不做介绍。二、一些讨论1.数据的发送与接收宜与业务逻辑分开这样就可以编写一个较为通用的发送与接收过程类(业务逻辑一般不能通用)要做到这点比较合适的做法是采用非阻塞的发送与接收函数并且将发送与接收过程放到单独的一个线程中通过线程间信息共享与业务线程传递要发送与接收的数据。2.实际上通用Server/Client层完成的是Socket的“业务”如果采用多线程宜在这一层完成上面的业务层只需调用这一层的发送或接收方法即可。