【问题标题】:Java Kryonet servers, client not receiving server responseJava Kryonet 服务器,客户端未收到服务器响应
【发布时间】:2013-06-09 15:30:43
【问题描述】:

我正在尝试使用 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(){}
}

【问题讨论】:

    标签: java networking client kryonet


    【解决方案1】:

    在观看 youtube 视频并浏览网络数小时后,我找到了答案。我将在这里发布,因为似乎很多人都遇到了这个问题,所以我想传播这个词。

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

    所以基本上不是使用

    client.start();
    

    要启动您必须使用的客户端线程

    new Thread(client).start();
    

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

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

    【讨论】:

      【解决方案2】:

      是的,在两者之间注入像Fiddler 这样的工具,这样您就可以看到来回的流量。更高的透明度和更多的信息总是更容易调试。

      【讨论】:

      • 提琴手是否适用于通用 TCP 交换?我以为它只理解 HTTP 消息。
      • 好点,D 肖利。听起来像谷歌搜索“tcp 代理”是个好主意:google.com/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多