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

时间:2012-03-15 10:21:10

标签: c sockets ubuntu client-server

我在c中写了一个冒险游戏,现在我想把它作为一个服务器(telnet)运行多个客户端。我希望每个玩家都拥有游戏的单独副本。

我对套接字编程并不熟悉,也不知道我该怎么做或如何开始,我读了一些教程但没有帮助。任何帮助? 请注意我已经在* ubuntu * 中完成了所有这些编程。

2 个答案:

答案 0 :(得分:0)

C中的套接字实际上是一个有用的东西。

首先,您需要提供足够的协议,并且必须在客户经理中实现它。

要拥有多个客户端,您必须拥有多个套接字,每个客户端一个,以及一个“主”套接字 listen 以进行连接。

主套接字是通过使用socket()创建的,然后您必须使用accept()来监听连接。从客户端连接到套接字后,accept()将返回一个新的套接字,保留与该客户端的通信。

套接字充当文件,因此套接字项用作文件描述符。为了确保您有一个良好的循环,您必须使用select()给它所有的套接字,以了解何时:

  • 您的主套接字上有一个待连接的新连接
  • 您可以写信给客户
  • 您可以从客户端阅读。

关于如何用这个来实现你的游戏,它在很大程度上取决于你的游戏是什么以及它是如何玩的。

我建议您实施一个操作队列,在客户端执行某些操作时进行缓冲,并尽快解决它们。使用select()的超时时间来帮助您。

答案 1 :(得分:0)

如果没有关于你定义为冒险游戏的更多细节,真的很难回答......

如果您的游戏是在控制台上设计/实现为单人游戏的,那么只需在某些套接字代码上进行操作就不会突然变成多人游戏。

你可以编写一个守护进程:当每个玩家连接它时,它会分叉一个新进程然后执行你的游戏 - 客户端只是输入命令等,而你游戏的唯一变化就是使用套接字而不是控制台IO。但与运行不同游戏副本的多人相比,这并没有真正的好处。

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

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