• 沒有找到結果。

显示错误信息L‘妊取成功N

在文檔中 该害犬海 (頁 65-77)

调用函数获取主机 信息

显示错误信息L‘妊取成功N

给主机信息结构体 变量赋值

调用corHle听)函数 建立服务端与客户

图4-23客户端建立连接流程图

(4)客户端断开连接。首先,判断连接状态变量status是否为Client,是则调用 closesocket()i函数关闭套接字,并置变量status为“未连接”,同时输出客户端未连接信 息。如果成功断开连接则返回成功标识,否则返回失败标识。其流程图如图4.24所示。

图4-24客户端断开连接程序流程图

(5)检查是否可以接收数据。先判断连接状态变量status是否处于未连接或断开连接 状态,是则返回错误信息。否则,先调用selectO函数统计处于就绪状态的套接字数目,

若这个数目大于零则表示可以接收数据。其流程图如图4—25所示。

53

图4-25客户端检查是否可以接收数据流程图

(6)检查是否可以发送数据。先判断连接状态变量status是否处于未连接或断开连接 状态,是则返回错误信息。否则,先调用selectO函数统计处于就绪状态的套接字数目,

若这个数目大于零则表示可以发送数据。其流程图如图4.26所示。

图4-26客户端检查是否可以发送数据流程图

(7)客户端接收数据。先判断连接状态变量status是否处于未连接或断开连接状态,

是则返回错误信息。否则,先调用recv()i函数从一个套接口接收数据,返回值为接收到

长安大学硕士学位论文

数据的字节数。若字节数等于零,则断开连接;若字节数小于零,则显示错误信息。否 则返回接收的字节数。其流程图如图4.27所示。

图4-27客户端接收数据流程图

(8)客户端发送数据。先判断连接状态变量status是否处于未连接或断开连接状态,

是则返回错误信息。然后,调用sendoi函数向一个已连接的套接口发送数据,若发送成 功,则返回所发送数据的字符数,否则返回SOCKET ERROR错误,输出相应错误信息。

其流程图如图4.28所示。

55

图4-28客尸端发送数据流程图

4.3.2服务器(ServerSocket)模块功能的设计

根据第三章中的分析,服务器模块的主要功能设计如下:

(1)套接字初始化。主要是指对Windows SocketsDLL(Windows套接字的动态链接 库)进行初始化,WindowsSocketsDLL指明欲调用的Windows SocketsAPI版本号,调 用相关函数,若初始化成功则允许Windows Sockets DLL进一步调用Windows Sockets

API函数,不成功则返回错误信息。其程序流程图如图4.29所示。

图4-29套接字初始化程序流程图

长安大学硕士学位论文

(2)释放套接字。应用程序或DLL调用WSACleanupO函数,从底层的Windows

Sockets DLL中撤销注册,以允许Windows Sockets DLL释放该应用程序的资源,以备 下一次使用。

(3)启动服务端。先调用socketO创建一个流套接字,若不成功则进行相应的错误处 理并断开连接,否则对套接字地址结构体变量sockaddr in进行赋值,用来标识TCP/IP 协议下的服务器地址。然后调用bindOi函数将本地地址绑定到所创建的套接字上,若绑 定失败,则进行相应的错误处理并断开连接;否则,调用listen0函数开始侦听,为申请 进入的连接建立一个后备日志,若侦听失败,断开连接并输出错误信息。然后,置连接 状态变量status为服务端状态,并返回真。其流程图如图4.30所示。

图4-30启动服务端流程图

(4)服务端断开连接。首先,判断连接状态变量status是否为服务端状态,是则调用 closesocketO函数关闭套接字,并置变量status为“未连接",同时输出客户端未连接信 息。如果成功断开连接则返回成功标识,否则返回失败标识。其流程图如图4.31所示。

57

图4-3l服务端断开连接程序流程图

(5)服务端从客户端组中断开与一个客户端的连接。判断连接状态变量status是否为 服务端状态,不是则返回空值;否则服务器从客服端组中断开一个客服端连接。其流程 图如图4.32所示。

图4-32服务端从客户端组中断开与一个客户端的连接流程图

(6)检查是否有新的客户连接。程序调用seleetOi蚕l数统计处于就绪状态的套接字数 目。

(7)接受一个连接请求并建立相应的连接。首先,判断连接状态变量status是否为服 务器状态,不是则返回。然后,调用accept()函数在一个套接121建立一个连接,若连接 失败则返回错误信息。最后,调用setsockopt()函数设置套接1:3的选项值并显示与客户 端连接成功。其流程图如图4.33所示。

58

长安大学硕士学位论文

图4-33服务端接受一个连接请求并建立相应的连接程序流程图

(8)检查是否可以发送数据。首先,判断连接状态变量status是否处于未连接或断开 连接状态,是则返回零。再判断是否有等待请求,无则函数返回,否则调用selectOi菊数 统计处于就绪状态的套接字数目,数目大于零则返回真,否则函数返回假。其流程图如 图4.34所示。

图4.34服务端检查是否可以发送数据功能设计流程图

59

(9)服务端发送数据。首先,判断连接状态变量status是否处于未连接或断开连接状 态,是则返回零。定义select()函数最多等待时间50ms,判断是否有已就绪的套接字,

没有则返回.1;否则调用sendO函数向一个已就绪的套接口发送数据,判断发送错误信 息SOCKET—ERROR是否成立,若成立则显示错误信息并移除此客户端连接,否则返回 所发送数据的字符数。其流程如图4.35所示。

图4-35服务端发送数据流程图

(10)检查是否可以接收数据。首先,判断连接状态变量status是否处于未连接或断 开连接状态,是则返回零。然后判断是否有连接请求,没有则返回零,否则调用selectO 函数统计处于就绪状态的套接字数目,若这个数目大于零则函数返回真,表示可以接收 数据,否则返回零。其流程如图4.36所示。

接收数据,返回值为接收到数据的字节数。若字节数等于零,则移除连接的客户端套接 字;若字节数小于零,则移除连接的客户端套接字并显示错误信息。否则返回接收的字 节数。其流程图如图4.37所示。

6l

图4-37服务端接收数据流程图 4.3.3信息输/出(CommunOutput)模块功能设计

根据第三章中的分析,信息输出模块的主要功能设计如下:

(1)初始化球员活动区域功能设计。利用XML文件中的数据,首先根据进攻球门方 向,初始化对方、己方球门坐标,再根据球员角色,初始化其目标位置和球员活动区域。

并计算区域坐标最值和最值所在点组成的边界矩形的中心点坐标,把坐标传递给世界坐 标ptCenter。其数据流程图如图4.38所示。

62

长安大学硕士学位论文

查询网络部件实现的接口,将当前设备加入用户程序的设备列表。再根据当前设备对象 指针和已知的网络工作参数值来配置网络工作参数,接着对设备对象的事件处理过程进 行设定并对网络工作环境进行初始化,并将设备列表指针发送给指定目标设备。其初始 化机器人通信连接设备流程如图440所示。初始化机器人通信设备之后,先对队标颜 色、球员角色、球员号以及进攻球门方向进行赋值,然后计算对方和己方球门坐标,最 后调用初始化球员位置函数进行球员位置初始化。其流程图如图4.41所示。

配置网络工作参数

设定事件处理过程

初始化网络工作环境

l将设备列表指针发送 l给指定目标设备

图“O机器人通信连接设备初始化数据流程图

存储)眦数据文件中的进攻球门

颜色、队标颜色、机器人角 色、号码、球场尺寸

初始化对方、己方球门坐标

初始化球员目标位置

初始化球员活动区域

存储活动区域矩形中心坐标参数

函数返回真

图4_4l初始化机器人相关信息流程图

长安大学硕士学位论文

在文檔中 该害犬海 (頁 65-77)

相關文件