2010-11-23 16 views
2

私は問題の正確な答えを見つけていないので、これをどうにかして尋ねるつもりです。実際には質問を再投稿してください私は謝罪しています。JavaでUDPを使用してネットワーク経由でオブジェクトを送信する

Javaクラスの別のラボ割り当てを行っています。今週のラボでは、ネットワーク経由でMessageオブジェクトを送信するためにUDPサーバーを作成しなければなりません。そのメッセージメッセージ自体はStringメッセージとStringユーザー名を持つ単なるObjectです。かなり恣意的です。メッセージはシリアライズ可能です。

ここで私が問題を抱えているのは、実際にDatagramPacket内のネットワークを介してそのメッセージオブジェクトを送信する方法です。実際のコンストラクタでは、バイト配列、配列のサイズ、InetAddress、およびポート番号を入れています。私の最終的な質問は、配列のサイズを調べる方法と、メッセージを送信するバイトにする方法です。

答えて

7

メッセージクラスをバイト配列にシリアライズする必要があります。これは送信するバイト配列になります(その時点でサイズを取得するのは簡単です)。

クライアントでは、バイト配列を逆シリアル化してMessageオブジェクトに戻す必要があります。

Javaには、シリアル化/逆シリアル化を処理するクラスのセットが用意されています。シリアル化するオブジェクトには、「Serializable」インターフェイスを実装する必要があります。

このような何かが働くだろう:

// Serialize to a byte array 
ByteArrayOutputStream bStream = new ByteArrayOutputStream(); 
ObjectOutput oo = new ObjectOutputStream(bStream); 
oo.writeObject(messageClass); 
oo.close(); 

byte[] serializedMessage = bStream.toByteArray(); 

そして、受信側では:

ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes)); 
Message messageClass = (Message) iStream.readObject(); 
iStream.close(); 

注意、あなたは、この意志をクライアントとサーバの間で共有される共通のインタフェースを作成する必要がありますペイロードのシリアライゼーション/デシリアライズを簡単に行うことができます。

+0

アハ!これは完璧で、まさに私が探していたものです!どうもありがとうございます! –

関連する問題