WoW 游戏软件

news/2024/5/10 9:57:02

访问【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://wed.xjx100/news/198279.html

相关文章

蓝牙RSSI/BLE AOA/UWB室内定位技术哪个好?

蓝牙AOA定位技术的出现,弥补了蓝牙RSSI值定位精度不高的缺陷。从理论上来说,可以对目前的蓝牙RSSI定位方案进行一定程度的替代。当然了,在高精度定位应用领域中,UWB定位已经在批量的成熟商用了。蓝牙AOA也具有很高的定位精度&…

hibernate入门项目(一)

本节我们将演示如何搭建一个 Hibernate 工程。 搭建 Hibernate 工程需要以下 7 步: 下载 Hibernate 开发包 新建工程 创建数据库表 创建实体类 创建映射文件 创建 Hibernate 核心配置文件 测试 1. 下载 Hibernate 开发包 浏览器访问 Hibernate 官网 下载 Hibern…

面试官:前端如果 100 个请求,你怎么用 Promise 去控制并发?

摘要: 时隔两年半,我,一个卑微的前端菜鸡,又来写面经了!以为钱是程序员年轻奋斗的动力!作为一个程序员,在一个地方慢慢成长后会产生一个能力小提升的一种傲娇!希望你们一跳涨好几丈。…

HTB靶机013-Poison-WP

013-Poison 靶机IP: 10.10.10.84 Scan Nmap 快速扫描: ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 10.10.10.84 -F Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-30 16:41 CST Nmap scan report for 10.10.10.84 Host is up (0.27s…

数据库中的几项区别

mysql中in和exists区别 mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop 循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不 准确的。这个是要区分环境的。 1. 如…

Netty核心组件模块(一)

1.Bootstrap和ServerBootstrap 1>.Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类; 2>.常见的方法有: ①.public ServerBootstr…

动态规划——带权活动选择

带权活动选择Time Limit: 3000 MSMemory Limit: 1000 KB Description 给定n个活动&#xff0c;活动ai表示为一个三元组(si,fi,vi)&#xff0c;其中si表示活动开始时间&#xff0c;fi表示活动的结束时间&#xff0c;vi表示活动的权重, si<fi。带权活动选择问题是选择一些活…

有意思的各类算法,思维题目分享

1.统计子矩阵 思路&#xff1a;二维前缀和超时&#xff0c;下面是前缀和加双指针&#xff0c;对列前缀和&#xff0c;两个玄幻控制行号&#xff0c;双指针控制列的移动 考查&#xff1a;前缀和双指针 import os import sys# 请在此输入您的代码 # 矩阵大小 N M n,m,kmap(int,…