【问题标题】:How to distinguish between Socket Objects如何区分 Socket 对象
【发布时间】:2014-03-02 23:50:06
【问题描述】:

您好,我正在创建一个纸牌游戏并使用 System.Net 和 System.Net.Sockets 类。我很难做的是弄清楚我将如何区分谁做了什么以及将信息包发送给谁。例如,这是将要发生的事情的顺序。

  1. 用户登录到程序并根据 MySQL 数据库检查凭据。

  2. 用户可以创建一个游戏 ID 或游戏编号,该游戏 ID 或游戏编号也会根据数据库进行检查,以查看是否已经存在匹配的游戏 ID 并允许他们加入游戏,或者如果没有游戏则插入数据进入数据库并等待其他玩家加入(如果您愿意在线游戏,请考虑服务器浏览器)。

  3. 一旦用户加入正在进行的游戏或创建游戏,它就会调用 Async BeginConnect()。

  4. 然后用户玩游戏,像(“打出的牌”)或(“失去生命”)等数据被发送给当前游戏中唯一的其他玩家。

我的问题是如何只将这些信息发送给正确的玩家。该游戏仅支持 2 名玩家 1 对 1,但在一个给定时间可能会进行多场游戏。例如,可能有 5 场比赛,每场比赛支持 2 名玩家。对我来说,跟踪这些套接字以便区分游戏 ID 的最佳方法是什么。

-> user#1 is playing in game with ID #1 against user#2
--> user#1 "plays a card"
---> Only send this information to user#2

我提前感谢您的帮助,如果我遗漏了一些有助于回答我的问题的内容,请告诉我。

更新
我继续查看其他人如何处理跟踪每个用户的单个套接字的示例,或者在本例中为 Game Room。我应该为让我们说一个 ClientSocket 创建一个类并为其分配属性吗?

【问题讨论】:

    标签: c# sockets tcp system.net system.net.sockets


    【解决方案1】:

    您可以通过将每个连接添加到每个客户端的键值列表来进行跟踪,例如(伪代码):

    Dictionary<string gameId, socket gameIdConnection> gameConnections;
    

    您知道每个动作属于哪个gameId,因此您可以使用它获取关联的连接/套接字,然后将数据包写入该套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      相关资源
      最近更新 更多