gpt4 book ai didi

Java Socket - 将对象绑定(bind)到 IP

转载 作者:行者123 更新时间:2023-11-30 08:06:45 25 4
gpt4 key购买 nike

我正在尝试处理游戏的 Controller (例如分屏游戏、多个 Controller 、一个屏幕/游戏)但不知何故我不知道执行此操作的最佳做​​法是什么?目前我正在尝试通过套接字的 IP 地址来命令播放器对象,以便每个 Controller 控制正确的播放器,但不知何故我将相同的 IP 绑定(bind)到多个播放器(通过引用错误复制?):

public class PlayerMapper {

public static final Logger LOGGER = LogManager.getLogger(PlayerMapper.class.getName());

private static final Map<byte[], Player> players = new HashMap<>();

public static synchronized Player getPlayer(final InetAddress paramInetAddress) {
return players.get(paramInetAddress.getAddress());
}

public static synchronized void addPlayer(final InetAddress paramInetAddress, final String paramName) {
final byte[] address = paramInetAddress.getAddress();
final Player player = players.get(address);
if (null == player) {
players.put(address, new Player(paramName));
} else {
LOGGER.debug("Player \"{}\" already connected!", player.getName());
}
}
}

用同一个“ Controller ”又名“127.0.0.1”测试它 5 次导致 5 个不同的播放器,HashMap 中键的值都是相同的,但引用不同,即使我复制了字节IP地址数组?

最佳答案

数组继承默认的 Object hashCode()equals() 方法。 Object#hashCode() 从对象的内存地址生成散列码,Object#equals() 只比较对象标识(它们是否是同一个对象)。

因此,即使两个数组具有相同的内容,它们也会被视为 HashMap 中的不同键。要将数组用作 HashMap 键,您必须将它们包装在一个对象中并提供自定义 hashCode()equals() 实现。

关于Java Socket - 将对象绑定(bind)到 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com