質問

ようにネットワークプログラミングに譲渡に書かれており、簡単なIMシステム(ほとんどのように簡単にバージョンのwindowsメッセンジャー).

どの仕様を指定しなければならない送信4分野のデータを単一のデータグラムパケットにもどれる:

To From Type Message
where type refers to message type, implemented as a user defined enum class.

すればよいのでしょうかを教えてもらったパックこれらすべてのデータを単一のパケット.

更新:thxでは、これまでに、 ものの言い文字列文字列から にパッチのパケットを個別にする

byte[] sendData = new byte [256]
sendData = sentence.getBytes();

もどしたいので追加の"から"文字列sendDataの文ん。

役に立ちましたか?

解決

簡単に言うと、必要なものは:

  1. オブジェクトを作成し(class)を含む4分野から/列挙型/メッセージ)
  2. serialiseます。での実施 直列化可能.参照他のソリューションはこちらかserialise
  3. に変換するバイト配列を送信のソケット(ここでは、説明にとどめます)

にょこbytestream,deserialiseキャストでインスタンスのクラスに定義1.ます。

作ると、を含むオブジェクト4分野serialisingこのオブジェクトを送信することができすべての四分野をひとまとめにしてデータを取得します。ものであるという印象をネック?).

ご注意datagramsいサイズを制限するのではなく、ネットワーク輸送層が、この用途ではないことになる問題なく対応します。

他のヒント

あなたはこのようなものを使用して、任意の直列化可能オブジェクトを送信することができます。

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buffer);
out.writeObject(objectYouWantToSend);
out.close();
buffer.close();
DatagramPacket packet = new 
    DatagramPacket(buffer.toByteArray(), 
                   buffer.size(), 
                   InetAddress.getByName(...),
                   portNumber);
socket.send(packet);

あなたは、単にネットワークインタフェースに渡す前に、それらを追加します。線に沿って何かます:

byte[] buff = new byte[256];
// Add al your fields here to buff.
DatagramPacket packet = new DatagramPacket(buff, buff.length, address, 1234);
socket.send(packet);

彼らはすべての文字列をしていない場合は、あなたがそのようにエンコードする必要があります。

あたっぷりのオプションのためのエンコードのデータは、継手の分野を一つのデータ構造を送信するすべてます。

重要なことは、エンコードを示す必要があるの分野でのパケットの遠端できなデコードで確実です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top