2

ソケット接続をプログラミングしています。サーバーとクライアント。サーバーは次の時間まで接続を待機しsocket.accept();ます。その後、すべての着信メッセージを処理できます。

ここまでは順調ですが、これらのメッセージを制御するにはどうすればよいでしょうか? 現時点では、たとえば、サーバーが特定のメッセージを期待しており、クライアントがこのメッセージを送信する必要があることしかわかりません。これはStringメッセージかもしれません。しかし、クライアントが別のメッセージ、たとえばInteger?を送信した場合はどうなるでしょうか。サーバーに異なるメッセージを期待させるにはどうすればよいですか? そして、パラメーターの型とパラメーターの数に基づいて、どのメソッドを実行するかを決定しますか?

それとも、クライアントとサーバーの間でよく知られている順序でメッセージを交換するためだけのソケットですか?

特に、サーバー側でegprocessIntegerとメソッドを提供するようなsthを探しています。getString()そして、クライアントからメッセージを送信した場合、これらのメッセージに基づいて、どちらかの方法を実行したいと思います。メッセージがどのメソッドに送られるかによって、クライアントによってこれを制御できますか?

4

3 に答える 3

0

ソケット接続は、必要なあらゆる種類のメッセージを転送するために使用されます。メッセージの「生の」バイトがメッセージを介して送信されます。メッセージの形式(文字データ-文字列、整数またはその他のタイプのオブジェクト、バイナリデータなど)を定義するのはソケットの責任ではありません。それはあなた次第です。また、メッセージ(要求と応答)の順序はユーザーが定義します。これらを合わせて、メッセージの形式、シーケンス、およびその他の動作は、トランスポートおよび/またはメッセージの「プロトコル」と呼ばれます。

独自のプロトコルを定義して実装することも、既存のプロトコルを使用することも、HTTP、RMI、XML、jsonなどのプロトコルの組み合わせを使用することもできます。

幸運を!トム

于 2012-08-06T20:22:13.293 に答える
0

Unix スタイルのソケット (Java が使用するもの) は、構造化された (「型付き」) データを渡す抽象化を提示しません。代わりに、任意のバイト ストリームを表します。これに構造を与える唯一のことは、クライアントとサーバーが通信方法 (プロトコル) に同意する場合です。ドキュメントからお気づきかもしれませんが、ソケットから実際にデータを取得する唯一の方法は、getInputStream() を使用することbyteですbyte[]

たとえば、クライアントが を送信したい場合String、おそらくメッセージの最初の 3 バイトとして「str」を配置し、それが の場合はInteger「int」または「dbl」Doubleなどを配置します。サーバーは、最初の 3 バイトがデータの種類を示していることを認識している場合、それを使用してメッセージの残りの部分を読み取る方法を判断できます。これは基本的にすべてのネットワーキングの基礎です。クライアントとサーバーは同じ「言語」を話します。

于 2012-08-06T20:16:53.567 に答える
0

Java チュートリアル ページでは、非常に簡単に説明しています: Java チュートリアル: ソケット

シリアライズ可能なオブジェクトを送信して、サーバー上でデシリアライズすることができます。もちろん、シリアライズ可能なクラスはクライアントとサーバーの両方で定義する必要があります。

これらのオブジェクトの読み取りと書き込みには、ObjectInputStream と ObjectOutputStream を使用できます。

于 2012-08-06T20:20:14.673 に答える