ここから本文です

javaでDatagramSocketをつかってサイズ1Mのファイルを送信するプログラムを作成し...

lon********さん

2013/1/1714:24:19

javaでDatagramSocketをつかってサイズ1Mのファイルを送信するプログラムを作成しているのですが送信する際にmessage too long というエラーがでてしまい解決方法が分かりません。

以下のsendPacket = new DatagramPacket~のところでエラーになります。
try {
sendPacket = new DatagramPacket(buf, // 送信データ
fileSize, // 送信データ長
InetAddress.getByName(SERVERNAME), // 宛先(サーバ)IPアドレス
SPORT // 宛先(サーバ)ポート
);
} catch (Exception e) {
e.printStackTrace(); //例外情報を出力
System.exit(1); //プログラムを止める(return code 1)
}

//Step3) UDPパケットを送信(自分のソケットからPacketを送り出す)
try {
sendSocket.send(sendPacket);
} catch (Exception e) {
e.printStackTrace(); //例外情報を出力
System.exit(1); //プログラムを止める(return code 1)
}

閲覧数:
985
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

aku********さん

2013/1/1715:02:11

UDP のパケットサイズは、最大で 64KB 程度です。
それ以上のサイズのデータを送るためには、刻んで送ってあげる必要があります。

例えば、60000バイト単位で送ってあげる場合。

int offset = 0;
int length = 60000;
int rest = fileSize;
while (rest > 0) {
sendPacket = new DatagramPacket(buf, // 送信データ
offset, // 送信データ開始位置
length > rest ? length : rest, // 送信データ長
InetAddress.getByName(SERVERNAME), // 宛先(サーバ)IPアドレス
SPORT // 宛先(サーバ)ポート
);
sendSocket.send(sendPacket);

offset += length;
rest -= length;
}

質問した人からのコメント

2013/1/17 15:07:48

やはり上限でしたか・・・
試してみます。
ありがとうございました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる