如何将游戏作为具有多个客户端的服务器运行?

问题描述:

我在c写了一个冒险游戏,现在我想运行它作为一个服务器(telnet)与多个clients.I希望每个玩家有单独的游戏副本。如何将游戏作为具有多个客户端的服务器运行?

我不是很熟悉套接字编程,不知道如何做到这一点或如何开始,我读了一些教程,但没有帮助。任何帮助? 请注意,我已经完成了* ubuntu *中的所有编程。

+1

我建议你先从Google搜索“linux socket tutorial”开始,然后继续。 – 2012-03-15 10:25:06

+0

其实我读了几个教程,但不明白我该如何使用我的游戏代码! – matarsak 2012-03-15 10:26:58

+0

我认为你至少必须告诉我们是什么样的游戏。这是一款图形游戏吗?还是文字冒险? – Ivan 2012-03-15 10:31:06

真的真的很辛苦没有更多的细节来回答你定义为一个冒险游戏......

如果你的游戏设计/作为一个控制台上的单人游戏中实现,只是螺栓上的一些插座码是不会突然让它变成多人游戏。你可以编写一个守护进程:当每个玩家连接到它时,它会分叉一个新进程,然后执行你的游戏 - 客户端只是输入命令等等,你对游戏的唯一改变是使用套接字而不是控制台IO 。但与运行不同游戏副本的多人相比,这并没有真正的好处。

我猜你真正想要的是服务器包含一些“共享信息”,例如有多少玩家正在玩,每个人的位置等等。为此,您需要找出一组您希望从客户端发送回服务器的消息。你需要弄清代码的哪些部分是客户端,哪些是服务器端。

基本上我认为实际的套接字代码很简单,游戏的设计和架构以及它如何使用套接字是更难的部分!

+0

我想我应该像你说的那样写一个守护进程。 – matarsak 2012-03-15 10:57:21

C中的套接字实际上是一个有趣的事情。

首先你必须拿出一个合适的协议,你必须在你的客户端管理器中实现它。

要拥有多个客户端,您必须拥有多个套接字,每个客户端一个,并使用一个“主”套接字监听的连接。

主套接字通过使用socket()创建,然后您必须使用accept()来侦听连接。从客户端连接到您的套接字后,accept()将返回一个新套接字,用于与此客户端进行通信。

套接字充当文件,因此套接字项被用作文件描述符。要确保你有一个很好的循环,你必须使用select()给它所有的插座,知道什么时候:

  • 你有你的主插口挂起一个新的连接,
  • 您可以写信给客户,
  • 你有一些东西要从客户端读取。

关于如何用这个来实现你的游戏,它高度依赖于你的游戏是什么以及它是如何玩的。

我建议你实施一系列的动作,在客户端做些什么时缓冲,尽快解决它们。使用select()的超时时间来帮助你解决这个问题。

+0

我想运行程序作为服务器,我可以连接使用,例如,telnet。服务器应该处理任何数量的同时连接的玩家。不同的游戏应该彼此分开,每个玩家都在他/她自己的世界副本中操作。我为单人玩家写了冒险游戏! – matarsak 2012-03-15 10:46:01