0

メッセージの送受信にはKryo-netを使用しています。サーバー側では、新しいスレッドを開いてサーバーを設定します。問題は、スレッドがコードの最後で終了するため、実際にはリクエストのリスナーが存在しないことです。

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;

public class MessagingServer implements Runnable{
  private Server server;

  public void stop(){
    this.server.stop();
  }  

  public MessagingServer(){ 
    this.server = new Server();
  }

  @Override
  public void run() {
    try{
      if(server!=null){ stop(); }      

      this.server.start();
      this.server.bind(54555, 54777);

      Kryo kryo = this.server.getKryo();
      kryo.register(NewRequiredJobRequest.class);
      kryo.register(NewRequiredJobResponse.class);

      server.addListener(new Listener() {
         @Override
         public void received (Connection connection, Object object) {
            if (object instanceof HelloRequest) {
               HelloRequest request = (HelloRequest)object;
               System.out.println(request.text);

               HelloResponse response = new HelloResponse();
               response.text = "Thanks!";
               connection.sendTCP(response);
            }
         }
      });
    } catch (Exception e) {
      System.out.println("kryo server exception"));
    } 

    // once the code reach here the thread is ended..
  }
}
4

3 に答える 3

0

KryoNet Client#start と Server#start はデーモン スレッドを開始します。アプリにデーモン以外のスレッドが他にない場合:

new Thread(client).start();
new Thread(server).start();
于 2013-11-26T17:11:20.817 に答える
0

サーバーオブジェクトには、おそらくループで実行する必要があるある種のlistenまたはメソッドがあります。accept

于 2013-09-16T09:58:30.217 に答える
-1

私はkryoを使用したことがありませんが、これが役立つと思います.

    import com.esotericsoftware.kryo.Kryo;
    import com.esotericsoftware.kryonet.Connection;
    import com.esotericsoftware.kryonet.Listener;
    import com.esotericsoftware.kryonet.Server;

    public class MessagingServer implements Runnable{
      private Server server;

      public void stop(){
        this.server.stop();
      }  

      public MessagingServer(){ 
        this.server = new Server();
      }

      @Override
      public void run() {
        try{
          if(server!=null){ stop(); }      

          this.server.start();
          this.server.bind(54555, 54777);

          while(true) {

           Kryo kryo = this.server.getKryo();
           kryo.register(NewRequiredJobRequest.class);
           kryo.register(NewRequiredJobResponse.class);

           server.addListener(new Listener() {
             @Override
             public void received (Connection connection, Object object) {
                if (object instanceof HelloRequest) {
                   HelloRequest request = (HelloRequest)object;
                   System.out.println(request.text);

                   HelloResponse response = new HelloResponse();
                   response.text = "Thanks!";
                   connection.sendTCP(response);
                }
             }
           });
         }
        } catch (Exception e) {
          System.out.println("kryo server exception"));
        } 

      }
    }
于 2013-09-16T09:51:30.570 に答える