0

(Netty を使用して) ダミー サービスを作成したい既存のサービスがあります。これは、テスト目的で使用されます。

サービスの既存のクライアント コード フラグメントは次のようになります。

Socket socket = new java.net.Socket();
socket.connect(new InetSocketAddress("localhost", 8080), 10000);
socket.setSoTimeout(20000); // set a timeout of 20 seconds
InputStreamReader ir = new InputStreamReader(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// write some string to the server and wait for answer
out.println("SomeCommand");
// server has written some answer, read it
char[] c = new char[2];
ir.read(c, 0, 2);
String cs = new String(c);
if ("OK".equals(cs.toString())) {
    // write some more string's to the server
}
// we're done, close the connection
out.println("BYE");
out.close();
socket.close();

Nettyは、java.net.Socket 接続用のサーバーを作成するための適切なフレームワークですか? (そうでない場合、どのフレームワークを使用する必要がありますか?)

QuoteOfTheMoment の例を使用して、Netty から始める方法を見つけようとしています。QuoteOfTheMomentServerHandler は基本的に私が望むことを行います。着信メッセージに対して、上記のスニペットが入力ストリームを使用して回答を読み取ることができるように、何らかの回答を返しますが、上記のソケットは QuoteOfTheMomentServer に接続できません。エラーは「接続が拒否されました」です。

[編集] より明確にする:
問題 (私が思う) は、接続していないか、使用しているポートです。より良い質問をしてみましょう:

私はnettyを始めたばかりで(nioの経験はありません)、さまざまなタイプのチャネル、パイプラインなどに精通していません。
サーバーは、サーブレットの要求/応答のように (http ではない、または http サーブレット impl を再構築しようとしているなど)、コード フラグメントのように出力ストリームに書き込まれた inputString に反応し、いくつかの文字列/バイトを入力に書き戻す必要があります。 -stream コード フラグメントのように、クライアントは次に移動します。そのため、接続は開いたままで同期する必要があり、クライアントはサーバーからの応答を待ちます。Javaチュートリアルの「ソケットのサーバー側の書き込み」の例を使用すると、クライアントで動作させることができます。でもnettyからスレッドハンドリングなどを活用したい。
QuoteOfTheMomentServerHandler は、私が望むサーバー側の実装のようですが、そのセットアップは指定されたクライアント コードを処理できますか?

問題は、クライアントの動作方法を考慮して、どの種類のパイプライン、チャネル、またはそのようなものを使用する必要があるかということです。

ここでも、クライアントとサーバーが存在します。既存のクライアントと連携するダミーのサーバー実装を構築したいと考えています。

4

1 に答える 1

1

Netty は TCP/IP フレームワークです。したがって、TCP/IP サーバーを開発している場合は、このツールキットを使用すると便利です。

クライアントをサーバーに接続しようとするとエラーが発生すると思います。また、サーバーも実行されている必要があります。

接続が拒否されたというエラーが発生した場合、確認すべき点がいくつかあります。最初の 1 つは、ポート 8080 への接続を許可するサーバー上のファイアウォール (存在する場合) ですか? 次に、クライアント マシンから次のようなサーバーへの telnet セッションを開いてみてください。

Telnet yourserverip 8080

これにより、サーバーへのソケット接続が開かれます。エラー メッセージが表示された場合は、Google で検索してください。

最後の 1 つは、ポート 8080 を既に使用している tomcat、glassfish、IIS などのサーバーを実行している可能性があることです。たとえば、10810 などの非標準ポートを試してください。

更新:

netty を初めて使用する場合は、 http: //netty.io/docs/stable/guide/html/ にあるユーザー ガイドをお読みください。

Quote of the moment サービスを見てみましたが、問題の一部を発見したと思います。Quote of the moment サービスは、ブロードキャスト UDP/IP クライアントおよびサーバーです。UDP は、TCP IP のより軽量な「バージョン」です。クライアントまたはサーバーへの配信は保証されず、ブロードキャストされます。UDP は、一般に特定の IP をターゲットにするのではなく、ネットワーク全体にブロードキャストするため、一種のラジオ ブロードキャストに似ています。したがって、通常の TCP IP 接続は UDP サーバーでは機能しません。

UDP クライアントの作成方法については、このリンクを参照してください http://systembash.com/content/a-simple-java-udp-server-and-udp-client/

Quote of the moment サーバーを UDP から TCP/IP サーバーに変換することをお勧めします。それに慣れたら、最初からやり直すことができるはずです。

Netty が NIO 部分を処理することを覚えておいてください。これは、NIO に基づく高レベルのフレームワークであるため、多くの詳細が隠されています。netty を使用するために NIO をよく知る必要はありませんが、Netty の概念をよく理解する必要があります。

于 2012-05-09T14:34:41.900 に答える