首页 理论教育 网络电子白板的设计

网络电子白板的设计

时间:2022-02-12 理论教育 版权反馈
【摘要】:在设计网络部分的过程中,必须严格按照“客户/服务器模式”,将电子白板的网络传输分为客户端和服务器端两个模块分别构建。服务器端可以利用它向每一个连接的客户端发送消息,达到同步的目的。另外,在程序中定义了3个回调函数ReceiveCallback()、CloseCallback()和AcceptCallback(),用于配合上述2个类的使用。ReceiveCallback()在服务器端接收数据时触发,CloseCallback()在服务器端关闭连接时触发,AcceptCallback()在服务器端接受连接时触发。

在设计网络部分的过程中,必须严格按照“客户/服务器模式”,将电子白板的网络传输分为客户端和服务器端两个模块分别构建。首先,初始化这两个模块,创建套接字以及绑定地址;然后,服务器端通过监听端口等待连接请求,当客户端有连接信号时,服务器接受客户端的地址并建立连接,客户端在收到确认信号后,表示连接成功,可以进行数据传送。此时,传送的都是图形对象的信息,在传送信息前必须采用自定义的协议格式对信息打包,然后再发送。

为了能够在网络上进行图形元素的传输,必须定义自己的传输协议,格式如下:

在程序响应WM_MOUSEMOVE(鼠标移动)、WM_LBUTTONDOWN(鼠标左键按下)和WM_LBUTTONUP(鼠标左键抬起)这样三种Windows消息时,采用如下程序对数据打包:

通过以上程序,画图所需要的各种信息就被打包到字符数组tmpstr中,然后再通过CConnection::Send()函数发送。

在传输功能模块的具体实现方面,定义了两个类,即服务器类CNetWorking、负责客户端和服务器端连接的类CConnection。

在CNetWorking中定义的主要接口函数有:AcceptWait()、Listen()、IsListening()、Get LocalIPs()和ResolveLPs()。同时,在类CNetWorking中定义了如下的内部类CConnection List:

该类对服务器端用于管理客户端的列表结构进行维护。服务器端可以利用它向每一个连接的客户端发送消息,达到同步的目的。同时也可利用函数Add()或者Remove()来增加或删除客户端,完善控制功能。在CConnection中定义的主要接口函数有:Connect()、DisConnect()、HasReceived()、IsConnected()、Receive()和Send()。

类CNet Working与CConnection在具体实现传输功能时都采用了对Socket及其相应的API函数进行封装的方法。下面以CConnection::Send()函数为例,说明如何利用Socket函数来完成相应的功能。

可见,为了满足对各个Socket资源的同步要求,在CConnection::Send()函数中增加了一个信号量,其他则是对Socket函数Send()的简单封装。另外,在程序中定义了3个回调函数ReceiveCallback()、CloseCallback()和AcceptCallback(),用于配合上述2个类的使用。ReceiveCallback()在服务器端接收数据时触发,CloseCallback()在服务器端关闭连接时触发,AcceptCallback()在服务器端接受连接时触发。

在这3个回调函数中ReceiveCallback()函数最重要,每个节点在接收到另一个节点的消息后,都要执行该函数的调用,具体形式如下:

由此可见,ReceiveCallback()作为核心函数,其主要功能是:①首先利用CConnection::Receive()函数获取所需的信息,然后用API函数sscanf()对缓存buff中的数据进行解析,变为可以方便处理的简单数据类型的信息,最后利用GDI函数进行本地画图;②利用for循环语句将得到的消息发送到除自己以外的其他节点,实现各个节点间绘图的同步。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈