Dan*_*nMc 2 java networking client kryonet
我正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
服务器
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);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
响应和请求类
public class SomeRequest {
public String text;
public SomeRequest(){}
}
public class SomeResponse {
public String text;
public SomeResponse(){}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*nMc 12
经过几个小时观看youtube视频并在网上筛选后,我找到了答案.我将在这里发布,因为似乎有不少人有这个问题所以我想传播这个词.
基本上,客户端会在接收和输出消息包之前立即关闭.这是因为"从r122开始,客户端更新线程被制作成守护程序线程,导致子进程在完成初始化后立即关闭.",解决方案是"也许你可以使用它?新线程(客户端).start( );".
所以基本上不是使用
client.start();
Run Code Online (Sandbox Code Playgroud)
要启动必须使用的客户端线程
new Thread(client).start();
Run Code Online (Sandbox Code Playgroud)
我认为这会阻止线程进入守护程序线程,因此可以解决问题.
资料来源:https://groups.google.com/forum/?fromgroups#!topic/kryonet- users/QTHiVmqljgE
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |