:)
各位:)
我想做一个网络小游戏但遇到了实时数据通信的问题??要求timer 每1毫秒发送数据(当然理论上了)但要求越快越好:)还请大家指教:)
另外,我想了解一下CS的原理:)
请知道的一并搞之:0
谢!!:)
各位:)
我想做一个网络小游戏但遇到了实时数据通信的问题??要求timer 每1毫秒发送数据(当然理论上了)但要求越快越好:)还请大家指教:)
另外,我想了解一下CS的原理:)
请知道的一并搞之:0
谢!!:)
解决方案 »
- vb数据库查询总说我select附近有语法错误
- ip地址自动获取
- 求关于图片分析的资料
- 讨论:在win98下,有什么办法可以禁止修改和删除一个目录下的所有文件
- 水晶报表高手请看,我用储存过程报回的recordset记录集,如何传给报表
- 为什么会这样呢?
- 关于组合查询的一个问题
- 学VB第二天遇到的问题,高手帮帮我.
- VB6.0精简版是不减掉了commondialog控件
- 实时错误'-2147217885(80040123),给定RHOW涉及到一硬删除或软删除行是什么意思,怎么解决?
- 求助:怎样实现数据库中的日期与当前日期的比较?
- 请看一段MSDN中的例程,为什么在编译后会出现运行错误:运行时错误‘13’数据类型转换错误
精确到1毫秒(除非他是几亿$的服务器)使用事件触发就行了
再现RPG
http://www.dapha.net/down/list.asp?id=817
:)
我要做的是一个http://huascar.vicp.net/vbbbs/viewfile.asp?ID=12要求实时传数据??
请大家帮忙:)谢谢:)
http://61.33.109.69:81/samvicky/shell/101.rar我要做的是两个人“联网”一起玩但,因为程序本身就要求数据通信
所以“使用事件触发就行了”感到很~~~~~~请大家试过后给我一些建议,由于还没有解决“实时通信”的问题
所以有时候可能出错,
望大家给我好的方法:)谢!!!
网络不存在实时的概念,你说1ms限制, 要是实时,远远不够,可以无限小,数据包无限大,
无限多的无用数据
任何网络游戏都是基于事件触发, 积木要用事件触发, 实在是太简单!
以这个程序为例:
1: 任何玩的人都属于client,需要登录服务器,由服务器转给你数据
联众,中国在线游戏中心就是这个样子
2: 一方做server,另外一方做client, 然后client连接server,握手后,开始玩,属于
点点式的,从你做的这个程序来看,以及目前的进展来看,你是准备做成这样的模式3: 还是回到实时通信这个问题来。 如果网络游戏说它是实时的, 只是说,任何一方的动作
都让另外一方知道。 一般积木的动作只有5个, 左移一格,右移一格, 下移一格,
旋转一次,出现新方快, 其中1,2,4动作是用户产生的,
3是系统(定时器)以及用户按下落加速下落产生的。 5是程序一次降落到底产生的
当然你的程序目前没有实现4这个动作(没有旋转),
还有,有些积木还有6这个动作,即:急落,
有些积木的旋转分2中, 顺时针,逆时针, 也可以分别定义2中动作4: 开始等待网络事件编程: 从你这个程序来说
1: server监视
2: client连接
3: tcp上连接成立
4: client发送数据: 我要开始游戏
5: server收到这个数据。让用户选择,ip地址xx的用户请求开始积木,是否开始
, 否退出, 是进入6
6: server发送,我接受了请求, 我的randomize_seek是xxx
(注:我想你实现积木的7种方快随机出现,肯定是用了rnd函数吧,
为了公平起见,即:client, server出现的方格次序一致,
则randomize 一个相同数: randomize_seek)
7: server发送了以后,开始游戏,winsock继续等待事件
8: client收到了“server接收请求”后,开始游戏,winsock继续等待事件
'----以下属于client ,server 2方处理的事情
9: 开始游戏后,出现了一个新方快, 产生事件5 ,发送包给对方:
5号事件:方快样式(1--7)
用户按了旋转产生4号事件,发送包给对方:
4号事件:用户旋转了
用户按了左键,用户按了右键,计时器产生了下落...
分别发送不同的包:
......包格式自己定义
10: winsock的dataarrvail事件中,解释相应的包,在另外个小窗体中,根据命令,解码出
对方的当前样子
11: 可以设定格式, 用户按了2下左键,,减少数据包,但是会产生丢帧
12: 可以看看联众, 如果网速慢, 他会这样: 先看到几个动作,后来不动了,后来狂动.
其实我想这样.如果速度慢, 可能跟不上传送速度,(虽然这个包太小), 他反正这样:
发送一个包(一定要确认对方收到!!),如果对放少收了一个包,就出问题了!解码不出了!
如果对方没有响应了... 说明速度慢了! 可以减少无用数据(tcp,ip头部)即一个包
发送多个命令! 可以在命令头部识别,这是几个命令! ,这样造成 [对方接收窗体]
中不动了, 突然一下动的好快!
发现速度慢了!也可以这样,直接把当前状态发送出去,积木这个游戏中 可以用2维
数组表示, 这样不动了,突然一下就变了状态! 联众好象2中都用了关于你那个程序: 一,按键判断不好,按一下走好多格! 没有旋转,没有设定速度等,改进祝早日成功
我还没有完全做好,只是让大家试试:)
对于<1>的确有问题:)但我没有解决的方法,我怕有时要求“连续按时”却有很慢:(
对于<2>我已经做了“方向键上”是变,也就是旋转:)对于这个“问题”我是这样想的,希望交流:) 首先,1。我建立连接后
2。程序分别运行(连接后不分客户端与服务端,就是说,他们两者的“块图形”数据是互相独立的),传输的只是自己“位置”四个“点”的坐标。
3。当产生“着落”后另传一组数据:)
我考虑这样的方法是因为这样传输的“数据类”比较少,只有两种
而且,由于两端独立运行,速度比较快,但如果按照你说的用“客户-服务”模式,如果速度快的时候我想客户端会不适应,(比如当客户端按向下时,首先要发送数据给服务端,然后服务端)再发送数据给客户端,客户端接受,转换。)经过这样,当客户端按下时,就会产生一种“顿”的感觉:( 你有没有发现,我的程序中,速度快双方是还是很感觉很快的,因为自己控制自己的方块,所以不会“顿”:)
但,由于数据传的太快,有些数据会 “粘”在一起比如:123456789
123456789
123456789
123456789123456789 ‘数据能收到,但就是这种现象,给我造成很大的麻烦:(
123456799
123456789
123456789
123456789
123456789123456789 ‘数据能收到,但就是这种现象,给我造成很大的麻烦:(
123456799
123456789所以需要自己定义包格式, 给你一个参考。 我的一个实现' 下面包发送格式
'--------------
' cmd的第一个包
'packet_len as long
'randomize_seek as long
'send as long = 0 '发送是0
'msgNo as long
'tick_count 'getDataMsgNo的时候生成
'firstPacket as long = 1 '1
'packetTotal as long
'version as long = g_version 'g_version
'cmd_1 as long
'cmd_2 as long
'data() as byte'---------------
' 其他包
'packet_len as long
'randomize_seek as long
'send or response as long '发送是0, 应答是1
'msgNo as long
'tick_count '发送读datamessage, 响应用cmdmessage
'firstpacket as long '
'packetNo as long
'data() as byte
看看tcp ,ip头是怎么定义的 可以到 www.rfc.net 看看rfc文档
不过我们需要定义的是应用层的,保证包不丢失,并且含有确认机制等
以我上面定义的包为例子:
认为请求方发送的第一个包叫做cmd包,其他的包统统叫做第2中包
多个包的组合叫做消息, 消息代表一次所要表白的完整信息
如下:
packet_len 包的长度 4 个字节 解包的时候先读这个字段,盘bytetotal是否有这么多
randomize_seek 4个字节, 随机种子,用来加密数据
send for response? 4个字节, 发送的为0 ,响应的为1 根据这个字段判断是入哪个本地缓冲?
msgNo 4 字节, 消息号
tick_count 4 字节, 消息标识 ,唯一性
packet_total 4 字节,该消息中有几个包
cmd_1 4 字节, 命令1
cmd_2 4 字节, 命令2 参考windows消息的2个参数定义的
data() 具体数据
也就是说发送方发送的包按上述格式发送,然后数据用里面的randomize_seek && randomie & rnd
加密, 解密的过程为逆运算
然后到 winsock数据到达的时候,来解包, 判断属于第几个包.
当然, 你还需要到程序中定义结构体数组表示当前发送消息缓冲区, 接收消息缓冲区的,
主要还是在理解, 不太好讲, 要打出来的话好长, 这是我定义的一个应用层的协议, 模块大概有
1000多行, 还需要考虑到 超时自动断开(比如网线断了等), 这个模块不可以给你的.因为是公司的关于数据拈贴的原因 可以看这个帖子
http://expert.csdn.net/Expert/topic/1857/1857336.xml?temp=.5424616好运