现在网络游戏的网络功能很大一部份是居于WinSock/Socket之上的。但Microsoft的游戏开发包DirectX SDK同样提供了网络的功能----DirectPlay.
当然,WinSock/Socket与DirectPlay相比较,都存在着优缺.
而这个"优"与"缺"不是一两句话可概括的(本文重点也不是讲它们的区别).
DirectPlay的优点:Microsoft的工程师们已把它的网络功能写好了,这样可以为您节省下不少的泡MM时间.如:网络初始化、网络通信的函数功能、网络分组功能等等等("网络分组"是本文的中心)
DirectPlay的缺点:他的服务端只能运行在Windows平台上;只能支持较少数量的玩家(好现没有哪个公司或个人证明过,在MSDN论坛上我问过之类的问题,但MicroSoft说这主要是靠你写的程序的类型和你的服务器有关而且他们过去也在内部做过有10000名玩家的试验,我在Microsoft的帖子详见: http://communities.microsoft.com/newsgroups/previewFrame.asp?ICP=msdn&sLCID=us&sgroupURL=microsoft.public.win32.programmer.directx.networking&sMessageID=%253CObG98IsTCHA.1640@tkmsftngp10%253E )
萝卜青菜各有所爱,关于谁优谁劣就留给各位讨论吧。
好了,现在进入主题。
先给大家介绍DirectPlay中"组"的功能.
我们知道,在网络中要给某人发送消息,就要知道他的地址,也就是说要给一群人发送,就是要知道他们每个人的地址.这样,一个一个轮着发不会很麻烦吗?还好,DirectPlay引入了组的概念.只要你把这些人加入某组,以后给这个组发一条消息,他们每人就都会收到这个消息.怎么样?很爽是吧~~
爽是爽,但问题来了,DirectX SDK 8.1 与 DirectX SDK 7.0 有了相当大的改变,而这些改变SDK Help中又只是用几句话带过(有的甚至没有讲).比如有几个函数在8.1中就消失了,如:AddGroupToGroup()、RemoveGroupFromGroup()、CreateGroupInGroup()、CreatePlayer()等等等...
而我们要用这些函数时要怎么办?SDK`s Help中又没说清楚~~
且现有的函数最多只是给你这个函数的类型是什么、参数是什么、返回值是什么、而没有具体用法......
这所有的一切的一切将在本文章所附带的范例中一一给您展现,且例子中的代码有详细的中文注解.
注:
本例子在以下编译环境中通中通过:VC6.0、DirectX 8.1 SDK、WinXP
正文完
附件: