java - Kryonet:客户端不能同时发送和接收?

标签 java networking kryonet

我正在使用 Slick2D 制作游戏并使用 Kryonet 进行多人游戏。我的架构的设置是为了让所有客户端都连接到服务器,该服务器本身并不玩游戏(而不是玩家在同一程序中运行客户端和服务器)。这是一款 2D 射击游戏,当只有一个客户端在玩时一切正常。当我连接另一个客户端时出现此问题。

显然客户端不能同时发送和接收。例如,如果两个客户端同时使用武器射击,则看起来只有该玩家在自己的客户端上射击,而另一个玩家则处于闲置状态。同样,如果两个玩家都在移动,则另一个玩家不会移动,直到客户端玩家停止,然后另一个玩家会跳到当前位置。

我在这里提供了客户端和服务器监听器的代码:

public class ClientGameListener extends Listener {

protected Client owner;
protected MultiplayerClientGameState state;

public ClientGameListener(Client c, MultiplayerClientGameState state) {
    owner = c;
    this.state = state;
}

@Override
public void received(Connection connection, Object obj) {
    if(obj instanceof PositionPacket) {
        state.adjustPlayerPosition((PositionPacket)obj);
    }
    else if(obj instanceof FirePacket) {
        state.scheduleFireListing((FirePacket)obj);
    }
    else if(obj instanceof ToggleWeaponPacket) {
        state.togglePlayerWeapon((ToggleWeaponPacket)obj);
    }
}
}

public class ServerGameListener extends Listener {

protected Server owner;
protected MultiplayerServerGameState state;

public ServerGameListener(Server s, MultiplayerServerGameState state) {
    owner = s;
    this.state = state;
}

@Override
public void received(Connection connection, Object obj) {
    if(obj instanceof PositionPacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
    else if(obj instanceof FirePacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
    else if(obj instanceof ToggleWeaponPacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
}
}

关于为什么我的客户无法同时发送和接收信息,或者如何解决这个问题,有什么想法吗?

最佳答案

您可以尝试通过UDP发送消息。

关于java - Kryonet:客户端不能同时发送和接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345179/

相关文章:

java - static int 对于不同的进程是不一样的

java - 数据完整性违规异常 : could not insert

java - 比较所有模型对象

java - powerMockito 模拟文件对象

android - (Android、iOS、Windows、Linux)服务器轮询、推送、实现服务器

java - 是否可以在 wifi 网络中设置域名?

python - 您如何通过 Python(而不是通过 Twisted)运行 Twisted 应用程序?

java - 在 kryonet 中,如何在不停止程序的情况下断开与服务器的连接?

java - JList 和 ListModel 设计模式建议

服务器/客户端无法使用 kryonet 运行的 Android 游戏