【问题标题】:Java identifying user in a turn based client server gameJava在基于回合的客户端服务器游戏中识别用户
【发布时间】:2017-05-02 17:33:33
【问题描述】:

我正在写一个简单的回合制游戏。逻辑已完成,并且服务器正常运行。我只有一个小问题;我如何识别应用程序的用户?

现在,如果我结束回合,逻辑就像是单人游戏一样,我可以继续与玩家 2 一起玩,等等。我如何在玩家 1 轮到他的时候禁止第二个玩家的输入反之亦然?此外,它应该始终显示玩家本人的牌,现在它显示当前玩家的一张(在回合结束时切换)

我正在实现服务器套接字,并看到我可以获取用户的 IP 地址,但是我该如何连接两者呢?我是否应该将 IP 地址与播放器实例一起保存,并且每次输入时检查当前播放器 IP 是否与进行输入的 IP 地址相同?

服务器充当广播者,两个玩家都运行应用程序,当他们结束回合时,信息将通过服务器发送给另一个用户。

如果我可以提供一些具体的代码,请告诉我,我不想在这里发布它,因为它的信息太多。

【问题讨论】:

    标签: java server ip client


    【解决方案1】:

    我正在实现服务器套接字,并且看到我可以获取用户的 IP 地址,但是我该如何连接两者呢?

    客户端 IP 地址不能唯一标识用户。由客户端 IP 和客户端端口号组成的一对将用作 临时 标识符。 (但不是永久的,用户每次连接或重新连接时至少会有一个不同的端口号,IP 地址也可能会改变。)

    您可以使用哈希映射将 IP/端口对映射到“播放器”对象或名称或其他内容。

    我是否应该将 IP 地址与播放器实例一起保存,并且每次输入时检查当前播放器 IP 是否与进行输入的 IP 地址相同?

    IP + 端口。

    这是一种方式。另一种方法是跟踪您正在读取的套接字/套接字输入流。

    【讨论】:

    • 您好斯蒂芬,很高兴得到您的答复,因为我已经从您那里读到另一篇关于 IP(获取当前系统的 IP 地址)的文章。现在,游戏不会保存,总是重新打开,而且连接只需要通过局域网工作,所以我猜IP本身就可以了。我现在尝试用播放器保存 IP,然后进行检查,例如 'while(!(player[i].getIp() == Inet4Address.getLocalHost().getHostAddress()))) i++;。 ' 不幸的是,这似乎仍然无法完全奏效。我哪里错了?
    • “所以我猜 IP 本身就很好......” - 仅当您假设每台计算机有一个玩家并且没有人(例如)尝试作弊。
    • Inet4Address.getLocalHost().getHostAddress() - 那是服务器机器的IP地址!!!您需要使用Socket.getRemoteSocketAddressSocket.getPort。阅读 javadocs。依赖 javadocs 而不是调整(显然)正在做的事情与你正在尝试做的事情不同的随机例子。
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多