gpt4 book ai didi

Java Kryonet 服务器,客户端未收到服务器响应

转载 作者:行者123 更新时间:2023-12-03 20:29:59 26 4
gpt4 key购买 nike

我正在尝试使用 Kryonet 库自学一些 Java 网络知识。下面的代码和kyronet教程中的代码几乎一模一样。 https://code.google.com/p/kryonet/#Running_a_server

客户端成功发送消息“这是请求!”到服务器(服务器正在打印出来)但是客户端没有收到来自服务器的任何响应,即使服务器正在发送响应。

我尝试修复它但没有成功,任何人都可以看到或建议代码可能存在的问题/解决方案吗?

(代码如下)

客户端

public class Client_test {
Client client = new Client();
public Client_test() {
Kryo kryo = client.getKryo();
kryo.register(SomeRequest.class);
kryo.register(SomeResponse.class);
client.start();
try {
client.connect(50000, "127.0.0.1", 54555, 54777);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

client.addListener(new Listener() {
public void received (Connection connection, Object object) {
if (object instanceof SomeResponse) {
SomeResponse response = (SomeResponse)object;
System.out.println(response.text);
}
}
});
SomeRequest request = new SomeRequest();
request.text = "Here is the request!";
client.sendTCP(request);

}

}

服务器

public class ServerGame {
Server server = new Server();

public ServerGame() {
Kryo kryo = server.getKryo();
kryo.register(SomeRequest.class);
kryo.register(SomeResponse.class);
server.start();
try {
server.bind(54555, 54777);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
server.addListener(new Listener() {
public void received (Connection connection, Object object) {
if (object instanceof SomeRequest) {
SomeRequest request = (SomeRequest)object;
System.out.println(request.text);
SomeResponse response = new SomeResponse();
response.text = "Thanks!";
connection.sendTCP(response);
}
}
});
}

}

响应和请求类

public class SomeRequest {
public String text;
public SomeRequest(){}
}

public class SomeResponse {
public String text;
public SomeResponse(){}
}

最佳答案

在观看了 youtube 视频并在网上筛选了许多小时后,我找到了答案。我会在这里发布,因为似乎很多人都遇到过这个问题,所以我想传播一下。

基本上客户端会在接收和输出消息包之前立即关闭。这是因为“从r122开始,客户端更新线程被做成了守护线程,导致子进程一完成初始化就关闭了。”,解决方案是“也许你可以使用这个?new Thread(client).start( );.

所以基本上不用

client.start();

启动客户端线程你必须使用

new Thread(client).start();

我相信这会阻止将线程变成守护线程,从而解决问题。

来源:https://groups.google.com/forum/?fromgroups#!topic/kryonet-users/QTHiVmqljgE

关于Java Kryonet 服务器,客户端未收到服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011178/

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