- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 kryonet 客户端/服务器,可以正常工作......大部分情况下。客户端保持空闲状态,并在一段时间后最终断开连接,但这不是我当前试图解决的问题。目前,只要客户端和服务器在同一台计算机上,服务器和客户端就可以建立连接并来回发送数据(在客户端超时之前)。如果您尝试连接到 LAN 上的另一台计算机,连接会超时并失败。
这是我的问题:
导致连接问题的可能原因是什么?
让客户活下去的正确方法是什么? (次要目标,但如果你知道它,那就太好了)
*我为此使用 LibGDX 和 Kryonet。据我所知,他们应该不会有任何冲突。
服务器:
package com.me.mygdxgame;
import java.io.IOException;
import java.util.ArrayList;
import com.badlogic.gdx.math.Vector2;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;
import com.me.mygdxgame.Network.Obstacles;
public class GameServer {
Server server;
public GameServer () throws IOException {
server = new Server() {
protected Connection newConnection () {
return new PlayerConnection();
}
};
Network.register(server);
//Sends Stuff to Client
server.addListener(new Listener() {
public void received (Connection c, Object object) {
PlayerConnection connection = (PlayerConnection)c;
if (object instanceof Obstacles) {
if (connection.name != null) return;
ArrayList<Vector2> obs = ((Obstacles)object).obstacles;
if (obs == null) return;
System.out.println("Obstacles recieved.");
for(int i = 0; i < obs.size(); i++)
System.out.println("Obstacle " + i + "- x: " + obs.get(i).x );
return;
}
}
});
server.bind(Network.port);
server.start();
}
public void sendAll () { //Send out data
Obstacles ob = new Obstacles();
ob.obstacles = new ArrayList<Vector2>();
for(int i =0; i < Map.obstacles.size(); i++){
ob.obstacles.add(new Vector2(Map.obstacles.get(i).x,Map.obstacles.get(i).y));
}
server.sendToAllTCP(ob);
}
static class PlayerConnection extends Connection {
public String name;
}
}
客户:
package com.me.mygdxgame;
import java.awt.EventQueue;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import com.badlogic.gdx.ApplicationListener;
import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.me.mygdxgame.Network.Obstacles;
public class GameClient implements ApplicationListener{
Client client;
String name;
String RefreshHost;
boolean Connected = false;
ArrayList<String> hosts = new ArrayList<String>();
public static String host;
public GameClient (String host) {
client = new Client();
client.start();
this.host = host;
Network.register(client);
client.addListener(new Listener() {
public void connected (Connection connection) {
System.out.println("connected");
Connected = true;
}
public void received (Connection connection, Object object) {
if (object instanceof Obstacles) {
Obstacles obs = (Obstacles)object;
System.out.println("Obstacle recieved on client - " + obs.obstacles.size());
client.sendTCP(obs);
System.out.println("Obstacles sent back.");
return;
}else {
System.out.println("invalid packet");
}
}
public void disconnected (Connection connection) {
EventQueue.invokeLater(new Runnable() {
public void run () {
System.out.println("closed");
Connected = false;
client.close();
}
});
}
});
new Thread("Connect") {
public void run () {
try {
client.connect(5000, GameClient.host, Network.port);
System.out.println("Connected!");
client.setKeepAliveTCP(NORM_PRIORITY);
while(Connected) {
//System.out.println(client.isIdle());
}
client.run();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}.start();
}
@Override
public void create() {
// TODO Auto-generated method stub
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void render() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
最佳答案
我建议您在启动客户端之前设置主机
public GameClient (String host) {
client = new Client();
this.host = host;
client.start();
我不熟悉 kryonet 客户端,但这样做是有意义的。
通常确保您的客户端正在尝试连接到运行服务器的主机...
关于java - Kryonet 客户端连接问题 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233164/
有在项目中使用过Java Kryonet库的 friend 愿意分享一下经验吗?我看到它被推荐过几次,但实际上没有看到任何人谈论他们使用它的经历。 具体来说,我想确保它可靠且相对稳定。或者我应该考虑使
我发现这个 API 名为 Kryonet 。好吧,我尝试实现项目页面中提供的示例。然而,它并不成功。 服务器代码: public class KryoTest { public KryoTest()
这似乎是一个很常见的问题,但即使在花费了大量时间进行故障排除后,我仍然无法找到解决方案。我希望有一个更新的解决方案。 我正在使用 KryoNet Java 网络库设置一个简单的服务器和客户端。我的问题
当我使用这条线路进行连接时,我的 Kryonet 服务器在 5000 毫秒后断开连接client.connect(5000, 主机, Network.port);我以为 5000 是连接超时,但当我运
在有人试图告诉我这是重复的之前,我已经尝试过 this 上的解决方案以及我能找到的几乎所有其他答案。 我的项目在 IntelliJ 中构建得很好,通过了我设置的所有测试,它甚至可以从 IntelliJ
我正在用 Java 编写一个图形在线程序,并使用 Kryonet 库来处理网络。 我相信这个库要求数据包是类的实例。我不确定这一点,但是没有找到任何其他建议的文档。 我对网络和内存效率有一点了解,但没
我正在使用 Kryonet 进行对象的 TCP 发送,特别是名为 TransferMessage 的对象: public static class TransferMessage{String tex
我正在使用 Slick2D 制作游戏并使用 Kryonet 进行多人游戏。我的架构的设置是为了让所有客户端都连接到服务器,该服务器本身并不玩游戏(而不是玩家在同一程序中运行客户端和服务器)。这是一款
我遇到 Kryonet 服务器在收到来自客户端的对象后崩溃的问题。服务器代码: package com.qookie.miner_server; import java.io.IOException;
所以我在测试我的网络时遇到问题,下面有很多代码,但这只是我可以做的一个例子。我遇到的问题是,当我发送消息时,我向服务器和客户端注册的监听器似乎永远不会被调用。 lock.await(5000, Tim
我的 kryonet 遇到客户端断开连接的问题。谁能帮我解决这个问题的根源是什么? 使用kryonet库,为了让客户端保持连接,它需要发送和接收KeepAlive数据包。客户端线程会自动处理此问题。但
我注意到 Kryonet 大约每 5 秒发送/接收一个我未向每个连接的成员注册的对象。它可能只是几个字节,即使对于几千个玩家来说,服务器负载也不会超过 1 kB/s,但我需要知道。 这是为什么? 这有
所以我正在尝试 kryonet,发送自定义数据包,但我的服务器中的监听器似乎无法接收它。 server.addListener(new Listener() { @Suppre
我正在使用 KryoNet 学习一些网络知识,我遇到了一个问题,当我将对象从服务器发送到客户端时,它发送得很好并且我可以读取它,但是当我再次发送它时,我收到此错误。 服务器: server = new
我正在尝试在 Android 应用程序中使用 Kryonet,但是当我在 Android 虚拟设备上尝试使用它时,甚至在我的 Android 手机上,我都会收到此错误: -Could not find
简单的问题,是否可以用 Kryonet 发送原始字节数组数据包?客户端不使用 Kryonet,将读取字节 谢谢 最佳答案 Kryonet 基于通过 NIO 的简单 tcp 通信以及内置的 kryo 序
我关注了this Youtube tutorial涵盖 Kryonet 的基础知识。 基本上它是一个 Kryonet Hello World,它解释了如何设置一个基本的服务器和一个客户端,允许客户端向
我尝试使用 Libgdx 库为 Android 平台开发游戏。对于网络,我使用 Kryonet 库。 当我确定我的应用程序已连接到我的服务器时,我想更换屏幕。 网络部分似乎可以工作,但线程有问题:执行
我正在尝试使用 Kryonet 库自学一些 Java 网络知识。下面的代码和kyronet教程中的代码几乎一模一样。 https://code.google.com/p/kryonet/#Runnin
我正在做一个小型 MMO 项目,现在我正在开发登录/注册系统。每当我尝试发送 ClientLoginPacket 时,客户端就会与服务器断开连接,并且服务器根本不会收到该数据包。没有显示堆栈跟踪,但这
我是一名优秀的程序员,十分优秀!