問題タブ [kryonet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tcp - Kryonet サーバーは未加工のバイト配列を送信します
単純な質問ですが、Kryonet で未加工のバイト配列パケットを送信することは可能ですか? クライアントは Kryonet を使用せず、バイトを読み取ります
ありがとう
java - kryonet と amazon aws エラスティック Beanstalk の使用
Amazon aws エラスティック Beanstalk 内に kryonet サーバーをデプロイすることで共有できる経験がある人はいますか?
より具体的な質問 - 固定 IP アドレスを使用する必要がありますか、それとも Beanstalk の URL 経由で機能しますか? 固定 IP アドレスを使用する必要がある場合、Beanstalk のスケールアップにどのような影響がありますか?
sockets - Kryonet disconnect() 接続が TCP アドレスを取得できません
Listener の disconnect() メソッドでは、InetSocketAddress オブジェクトは常に null です。なぜこれが起こるのですか?
exception - 受け取ったオブジェクトをキャストするときの Kryonet 例外 (バグ?)
私のクラスには、リスナーを拡張する次の小さなコードがあります。
オブジェクトを受け取るたびに、すべてのパケットが実装するメソッド handle() を使用して、Packet というインターフェイスにキャストします。次に、将来の処理のために ConcurrentLinkedQueue に追加します。
それでも、UDP パケットをサーバーに送信するいくつかのキーをスパムした後、次の例外がスローされます。
スレッド「サーバー」での例外 java.lang.ClassCastException: com.esotericsoftware.kryonet.FrameworkMessage$KeepAlive は、com.xkynar.game.net.ServerSocket.received(ServerSocket で com.xkynar.game.net.packet.Packet にキャストできません.java:70) で com.esotericsoftware.kryonet.Server$1.received(Server.java:61) で com.esotericsoftware.kryonet.Connection.notifyReceived(Connection.java:246) で com.esotericsoftware.kryonet.Server.update (Server.java:208) com.esotericsoftware.kryonet.Server.run(Server.java:356) で java.lang.Thread.run (不明なソース)
例外はキャストで発生します。つまり、次のとおりです。
これはどのように可能ですか?そもそも「FrameworkMessage$KeepAlive」って何?受信したリスナーに入るのはなぜですか?
何が間違っているのか説明してください、それは私の間違いですか、それともバグですか?
java - kryonet で配列を送受信する
サーバー/クライアント システムを作成するために kryonet を使用しています。
サーバーからクライアントにint[][]を送信しようとしています。このタスクを達成するために、私はこれを試しました:
次に、サーバーリスナーで次のように書きました。
最後に、クライアント リスナーで ArrayPacket を受け取ります。
そして、私はそのようにすべてを登録します:
ただし、実行すると、 int[].class を登録する必要があるというエラーがスローされます。そのため、プログラムを再度実行すると、コンパイラはBufferOverflowExceptionをスローします。
では、どうすればこのエラーを修正できますか?
前もって感謝します。
java - オブジェクトの種類を決定するために、「instanceof」は何をチェックしますか?
私は kryonet を使用して、サーバーとクライアントからオブジェクトをやり取りしています。オブジェクトが受信されるたびに実行されるリスナーがあります。オブジェクトのインスタンスを決定するように見える唯一の方法は、次を使用することです。
オブジェクトが特定のタイプであるかどうかを判断するために instanceof がどのようなチェックを行うかを知りたいです。クラスがすべてのコードとまったく同じかどうか、変数とそこにある名前をチェックしますか? インポートされたパッケージもチェックしますか? あなたが私に与えるどんな情報も役に立ちます。
これを知りたい理由は、パケットの作成方法、サーバーのメソッドのコードがクライアントと異なるためです。たとえば、クライアントでパケットを送信するには、次のようにします。
私のサーバーではこれを行います:
java - サーバーにパケットを送信した後、Kryonet クライアントが切断される (Java)
私は小さな MMO プロジェクトを行っており、現在はログイン/登録システムに取り組んでいます。ClientLoginPacket を送信しようとすると、クライアントはサーバーから切断され、サーバーはパケットをまったく受信しません。表示されるスタック トレースはありませんが、これが私のコードです。申し訳ありませんが、それはすべて必要です。
ClientLoginPacket.java:
それがログインパケットです。これとサーバーの唯一の違いは、インポートとパッケージの宣言です (単なる archipelo ではなく archipeloserver)。ご覧のとおり、このクラスは Packet を拡張します。これが私の Packet クラスです。
すべてのパケットには、send()
それらを送信するために呼び出されるメソッドがあります。パケットを送信する方法は、これを行うことnew ClientLoginPacket(username, password).send();
です。Networking.sentTCP(this) を実行してパケットを送信することがわかる ClientLoginPacket クラスです。これは、メインの kryonet クラスでこのコードを実行するだけNetworking.java
です。クライアント側でパケットを送信するために使用するコードは次のとおりです。
kryonet では、送信する前にクラスを登録する必要があります。私はそれをしましたが、それが適切に行われたかどうかはわかりません。これが私が使用した正確なコードです。サーバ:
クライアント:
私が確かに知っていることは、パケットを送信する前にサーバーに接続していることです。サーバー上の接続リスナーでテストしました。私の問題は何ですか?履修登録に問題はありますか?両方のクラスが完全に同一である必要がありますか? 前もって感謝します!
psそのコードをすべて捨てて申し訳ありません。必要がなければ、通常はこれを行いません。なるべく入れません。他のものがどのように機能するかを確認し、問題があるかどうかを確認するためにさらに必要な場合は、私に尋ねてください. ありがとう!
java - 外部パッケージからクラスをインポート/参照できません
mg.networktest と mg.networktest.server の 2 つのパッケージがあります。両方とも、ネットワーク経由で送信する必要があるクラスを登録/シリアル化するために、同じクラスにアクセスする必要があります。サーバーパッケージで作成し、クライアントに含めるのがベストプラクティスだと思います。
ただし、クラスを適切に参照できません。別のパッケージも追加しようとしましたが、それは許可されていないと思います。しかし、それは私の他のパッケージを認識しません。以下のインポートはすべて取得しますThe import mg.networktest.server cannot be resolved
。私はそれを手に入れることができますが、それはimport mg.networktest.*;
それ自体を参照するだけです。
より明確にするために:
- パッケージ 1: (mg.networktest.server) には、クラス ChatMessage を持つ Network.java があります。
- パッケージ 2: (mg.networktest) には、パッケージ 1 のクラス ChatMessage が必要です。
- パッケージ 2: (mg.networktest) は実行できません:
import mg.network.server.*;
. - パッケージ 2 (mg.networktest) で、パッケージ 1 (mg.networktest.server) からクラス ChatMessage にアクセスするにはどうすればよいですか?