WoW 游戏软件

news2025/1/9 1:12:21

访问【WRITE-BUG数字空间】_[内附完整源码和文档]

我们选择Tcp协议进行传输,之所以采用tcp,首先是因为tcp传输稳定,相比于udp不稳定的传输,tcp能确保消息一定传输出去。然后是tcp有服务器,相比于 p2p 无服务器模型,tcp 可以记录数据,方便用于商用而且也比较安全。

主要设计思路:
我们选择Tcp协议进行传输,之所以采用tcp,首先是因为tcp传输稳定,相比于udp不稳定的传输,tcp能确保消息一定传输出去。然后是tcp有服务器,相比于 p2p 无服务器模型,tcp 可以记录数据,方便用于商用而且也比较安全。

客户端主要设计思路:
基于TCP协议,实现发送消息给服务器和从服务器接收消息。要实现“迷你魔兽世界” 客户端的基本框架主要分为以下几个部分:

指令,根据输入的指令,比如login,move,attack等,客户端要判断指令的有效 指令设计,输入指令login playername,客户端向服务器发送登录请求,输入指令move direction,客户端向服务器发送移动请求,输入指令attcak playername,客户端发送攻击另一位玩家的请求,输入指令speak message,表示该玩家要发言,内容为message,同样要向服务器发送请求,输入指令logout,表示退出登陆。

无效指令,如果输入的不是约定好的指令以及指令结构不正确,则客户端不向服务器发送请求。第一,登陆时玩家名不能有空格;第二,move指令后面的方向必须在north,south, west和east这几个方向中,如果为其他内容,则输出无效的方向的提示;第三,输入attack 指令后要判断被攻击玩家是否在该玩家视野范围内,如果不在视野范围内,则输出错误信息 “The target is not visible”,玩家视野范围为(x-5,x+5),(y-5,y+5),x和y为玩家坐标;第四,speak生成的数据中可以有空格;第五,logout指令,没有参数。

发送请求,根据输入的有效指令得到消息类型和消息内容,按照协议打包成字节发送给服务器。

处理应答,客户端接收到来自服务器的包,根据协议,先解析出消息类型,再根据不同消息类型的包的结构解析出包中的数据,再根据这些数据输出消息。

线程问题,客户端必须和服务器端进行异步通信。例如,当其他玩家生成一个 speak 命令,客户端将会收到SPEAK_NOTIFY 信息从服务器端,尽管客户端没有请求这个消息。这意味着客户端不能阻塞用户的输入。所以将输入指令发送请求和接收广播/应答的函数设为两个线程,其中一个通过一个死循环,输入指令并处理,另一个也是通过死循环不停接收广播/应答并处理。

异常处理,当遇到一些特殊情况时需要做异常处理。

如果服务器端不可用并且连接不能生成,客服端必须退出,且显示错误信息”The gate to the tiny world of warcraft is not ready.”。要实现这一点,需要通过try/except 连接地址和端口号的时候检测异常。

如果客户端从服务器端收到一个异常消息,客户端必须退出,然后输出错误消息”Meteor is striking the world.”。即如果客户端收到的包的长度不符合规范,或者解析到的消息类型不存在或与包的长度不匹配,说明客户端收到了一个异常消息。

如果客户端和服务器端的连接被异常中断,客服端必须退出,然后显示一个错误消息”The gate to the tiny world of warcraft has disappeared.”。由于python中的套接字断开连接时不会出现异常,而是会不断接收到空字符,所以在接收消息的地方做一个判断,如果接收到的消息长度为0,说明连接断开,则执行该异常处理。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

RocketMQ 下载安装

一、下载地址 https://rocketmq.apache.org/download/ 下载完成解压即可 二、安装 2.1 系统环境变量配置 1、右键我的电脑–>属性 ​ 2、高级系统设置–环境变量 ​ 3、系统变量中–>新建 2.2 启动NAMESERVER cmd命令框执行进入至‘MQ文件夹\bin’下 start mqnames…

【教学类-33-02】食物加加加2.0版(3、4、5、10、15、20以内数字加法,随机抽数)

作品展示 3以内点数加法:加法最大值6 4以内点数加法:加法最大值8 背景需求: 幼儿在完成“5以内加法21题、5以内减法21题”时,有两个特点: 1、50%幼儿口算、另外50%不会做的孩子虽然画圈划圈,但更多还是习…

数据结构_图

目录 1. 图的基本概念 1.1 图的定义 1.1.1 有向图 1.1.2 无向图 1.1.3 简单图、多重图 1.1.4 完全图(也称简单完全图) 1.1.5 子图 1.1.6 连通、连通图和连通分量 1.1.7 强连通图、强连通分量 1.1.8 生成树、生成森林 1.1.9 顶点的度、入度和出…

MapReduce【自定义InputFormat】

MapReduce在处理小文件时效率很低,但面对大量的小文件又不可避免,这个时候就需要相应的解决方案。 默认的输入格式为TextInputFormat,对于小文件,它是按照它的父类FileInputFormat的切片机制来切片的,也就是不管一个文…

Java基础学习(17)网络编程

Java基础学习 一、 网络编程1.1 什么是网络编程1.2 常见的软件架构:1.3 网络编程的三要素1.4 IP1.4.1 InetAddress用法 1.5 端口号1.6 协议1.6.1 UDP协议1.6.1.1 UDP的三种通信方式 1.6.2 TCP协议1.6.2.1 TCP底层原理 一、 网络编程 1.1 什么是网络编程 解释&…

C++常用的支持中文的GUI库Qt 6之一:下载、安装与使用

C常用的支持中文的GUI库Qt 6之一:下载、安装与使用 因为Qt发展变化较快,网上许多介绍Qt的下载、安装与使用已过时,初学者常因行不通而受挫,故此发布本文,以Qt 6.2.4开源版在Windows 10安装与使用为例介绍。 C好用的GU…

DM8:达梦数据库宕机版本记录汇总(持续更新中)

DM8:达梦数据库宕机版本记录汇总(持续更新中) 环境介绍1 SQL引起的数据库故障1.1 SQL引起的数据库故障汇总表1.2 gdb dmserver core 调试得到数据库崩溃时的内存信息1.3 优化参数解决故障 环境介绍 在测试环境或生产环境,特别情况下会遇到数…

go tool pprof 参数 ‘-base‘ 和 ‘-diff_base‘ 之间的区别

go tool pprof 工具是用于分析由 runtime/pprof包 或 net/http/pprof包产生的profile数据,完整的帮助文档在 https://github.com/google/pprof/blob/main/doc/README.md ,pprof 工具支持的参数很多,可以用命令 go tool pprof --help来查看全部…

DJ5-4 交换局域网(第一节课)

目录 一、局域网概述 1、LAN 的特点和分类 2、常见的网络拓扑结构 二、计算机与局域网的连接 三、局域网体系结构 四、链路层寻址地址 1、MAC 地址分配 2、MAC 地址识别 五、ARP 地址解析协议 1、ARP 地址解析协议 2、ARP:两个主机位于同一个局域网 3、…

网络计算模式复习(六)

什么是CDN CDN的全称是Content Delivery Network,即内容分发网络。 其目的通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决Internet网络拥挤的状况&…

socket套接字通信 TCP传输控制协议/IP网络协议 5.18

B/S :浏览器和服务器 C/S :客户机和服务器 网络的体系结构: 网络的层次结构和每层所使用协议的集合 网络采用分层管理的方法,将网络的功能划分为不同的模块 OSI模型: 共7种: 应用层:接收用户的数据,面…

Blender基础技巧小结(三)

本文续签一篇:Blender基础技巧小结(二)_皮尔斯巴巴罗的博客-CSDN博客 将物体显示为模板,类似Maya Template 四窗口视图 调整3d视图远截面 Blender并不直接支持放样,可以用第三方插件,但效果并不好 基于me…

usb摄像头驱动打印信息

usb摄像头驱动打印信息 文章目录 usb摄像头驱动打印信息 在ubuntu中接入罗技c920摄像头打印的信息如下: [ 100.873222] usb 3-2: new high-speed USB device number 5 using xhci_hcd [ 101.230728] usb 3-2: New USB device found, idVendor046d, idProduct08e5 …

SpringMVC的拦截器(Interceptor)

文章目录 1 拦截器概念2 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1:创建拦截器类步骤2:配置拦截器类步骤3:SpringMVC添加SpringMvcSupport包扫描步骤4:运行程序测试步骤5:修改拦截器拦截规则步骤6:简化SpringMvcSupport的编写 3 拦截器参数3.1 前置处理方法3.2 后置处理方…

使用frp进行内网穿透(远程连接内网服务器)

文章目录 云服务购买服务器端(即我们购买的服务器)配置客户端(即我们自己的服务器)配置使用xshell登录远程服务器在服务器端设置frp开机自启动在客户端设置frp开机自启动 这里主要介绍使用frp工具进行内网穿透,适合的场…

Spring6和SpringBoot3的新特性-你不得不了解的AOT原来这么简单

Spring6.0新特性 一、Spring的发展历史 二、AOT AOT是Spring6.0提供的一个新特性,Ahead of Time 提前编译。 1.AOT概述 1.1 JIT和AOT的关系 1.1.1 JIT JIT(Just-in-time) 动态编译,即时编译,也就是边运行边编译,也就是在程序运…

LangChain与大型语言模型(LLMs)应用基础教程:角色定义

如果您还没有看过我之前写的两篇博客,请先看一下,这样有助于对本文的理解: LangChain与大型语言模型(LLMs)应用基础教程:Prompt模板 LangChain与大型语言模型(LLMs)应用基础教程:信息抽取 LangChain是大型语言模型(LLM)的应用框架,LangCha…

RK3568平台开发系列讲解(LCD篇)快速了解RK LCD的使用

🚀返回专栏总目录 文章目录 一、内核Config配置二、MIPI配置2.1 引脚配置2.2 背光配置2.3 显示时序配置2.3.1 Power on/off sequence2.3.2 Display-Timings三、EDP配置3.1 引脚配置3.2 EDP背光配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇章带大家快速了…

数据结构_查找

目录 1. 查找的基本概念 2. 顺序查找和折半查找 2.1 顺序查找 2.1.1 一般线性表的顺序查找 2.1.2 有序表的顺序查找 2.2 折半查找 2.3 分块查找 2.4 相关练习 3. 树型查找 3.1 二叉排序树 3.1.1 二叉排序树的定义 3.1.2 二叉排序树的查找 3.1.3 二叉排序树…

想要一个本地部署的海洋实景三维展示系统吗?

最近几年实景三维非常火,很多人包括博主都想将自己平时干的海洋测绘项目进行实景三维化,这样做的好处就是无论是管理数据还是成果展示都非常方便。我们可能会使用谷歌地图、奥维地图、图新地球等地图服务软件,它们也提供了一些测量、画图功和…