2011-03-20 5 views
1

私の割り当てには、UDPサービスを使用して画像ファイルを送信することが含まれています。私の教授は、「交換されたデータメッセージには、送信側が受信側で重複してフィルタリングするために16ビットのメッセージシーケンス番号を含めるためのヘッダー部分が必要です。これどうやってするの?誰も私を助けることができます。その緊急のpllをUDPクライアント/サーバ....重複をフィルタリングするための16ビットのメッセージシーケンス番号が含まれています

+0

これまでに何を試みましたか? –

+0

通常の方法でUDPを使ってイメージを転送することができました...これは私たちの追加作業でした.... –

答えて

3

私はあなたのUDPパケットを作成すると仮定、あなたは、データを生成するためにByteArrayOutputStreamを使用しています。その場合は、そのByteArrayOutputStreamの上にDataOutputStreamをラップし、画像データをストリームに書き込む前にwriteInt(somesequenceNumber)を呼び出します。

受信側では、逆の処理を行い、ByteArrayInputStreamを中心にDataInputStreamをラップし、readInt()を呼び出してシーケンス番号を取得します。そこから、このパケットを既に受信しているかどうかを確認できます。

何か

のような書き込み側

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream dos = new DataOutputStream(baos); 

dos.writeInt(sequenceNumber++); 
dos.writeInt(imageDataLength); 
dos.write(imageData); 

dos.flush(); 

byte[] udpPacketBytes = baos.toByteArray(); 

読むサイドseenSequenceNumbersは、16ビットの値についていくつかの設定

+0

私はその小さな例を見せてくれますか? –

1

である私はDataOutputStream.writeShortを(使用し

ByteArrayInputStream bais = new ByteArrayInputStream(udpPacketBytes); 
DataInputStream dis = new DataInputStream(bais); 
int sequenceNumber = dis.readInt(); 
if (seenSequenceNumbers.add(Integer.valueOf(sequenceNumber))) 
{ 
    int imageLength = dis.readInt(); 
    byte[] imageData = new byte[imageLength]; 
    dis.read(imageData); 
} 

)とDataInputSTream readShort()/ readUnsignedShort()です。 writeInt()とreadInt()は32ビット値用です。重複を避けたい場合は、いずれの場合でも32ビット値を使用する方がよいでしょう。 ;)

関連する問題