![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
javaを使って通信の勉強をしています。
UDPを用いた通信のプログラムを作成しています。
送信側では、次のようにして送信したいバイト数を分割して送信しています。
BUF_MAX = 40960;
DatagramSocket socket = new DatagramSocket();
// data分のバイトデータを分割して送信する。
int part = 5242880 / BUF_MAX; // 分割して送信する回数
send_start = System.nanoTime();
for(int i = 0;i < part;i++){
byte[] buf = new byte[BUF_MAX];
buf[0] = (byte)i;
DatagramPacket sendPacket = new DatagramPacket(buf,BUF_MAX,serverAddress,servPort);
total += BUF_MAX;
// 指定したバイト数を送信する。
try{
socket.send(sendPacket);
}catch(IOException e){
System.out.println(e);
}
}
System.out.println(total);
このようにしています。
こうする理由は、5242880バイトのデータを128回に分割して送信して、
受信側で受信したパケットの最初の文字を見て、何個目のパケットが届いていないかを確認するためです。
受信側でこれらのデータを受信する方法を考えているのですが、どうすればよいか分かりません。
receive(packet)で受信するのは知っています。
送信された複数のデータを受信するのに、
for(int i = 0;i < 128; i++){
receive(packet);
}
というようにするのでしょうか?このようにすると、
このループを抜けることができません。それは、パケットが通信途中で紛失するため、128回受信しないからだとおもいます。
受信しなくなったらループを抜けるというようにすればよいとおもいますが、その方法が分かりません。
どなたかアドバイスをいただけないでしょうか?お願いします。
No.1ベストアンサー
- 回答日時:
案1)時間内に届かなかったらタイムアウトさせる。
案2)届かなかったパケットを再送させるよう、送信元と受信先が双方向にやり取りするようにプログラミングする。
案3)TCPを使う(timeoutは必要)。
回答ありがとうございます。
提案していただいた案1でやってみようと思います。
時間内に届かなかったらループを抜けるというようにしたいです。
setSoTimeout();で時間を指定することは調べたのですが、
これをどう応用するのかわかりません。
アドバイスをお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- Bluetooth・テザリング Bluetoothを使って知人(複数)のスマホにデータを送りたいのですが、スマホ→スマホの通信の場合 1 2022/06/29 19:20
- Android(アンドロイド) iPhoneには、なぜ僕が合計3台持ちしているGalaxy A22やXperiaXZ1、arrows 4 2022/07/12 18:42
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- iPhone(アイフォーン) 皆さんiPhoneは、機能が少な過ぎますか?? iPhoneには、なぜ僕がAndroid合計3台持ち 2 2022/07/12 19:59
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
ソケットを閉じる操作が・・・
-
ソケットを用いた1対多通信につ...
-
エクセル VBA でのCOMポート...
-
TCP/IP通信でのコネクシ...
-
UDP通信する時に、相手にどうや...
-
ソケットのクローズについて
-
UDP通信におけるbind関数について
-
名前付きパイプの通信ポートに...
-
UDP/IPでのソケット作成につい...
-
Socket通信の0バイト受信について
-
MFCソケットについて
-
ネットワークプログラミング ...
-
パケット通信時のIPヘッダの取...
-
WINSOCKのWSACleanupについて
-
ソケット通信 同じポート番号...
-
ソケットでクライアントのipア...
-
クライアントソケットMACアドレ...
-
異なる言語間でのソケット通信...
-
C言語(Windows)から...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信におけるbind関数について
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
ソケットを用いた1対多通信につ...
-
ソケットでクライアントのipア...
-
ソケットのクローズについて
-
相手のIPアドレスを取得する方法
-
SIPがNATを越えられない理由
-
Socket通信の0バイト受信について
-
CreateFile関数でCOMポートが開...
-
Connectエラーが出てしまう・・...
-
同じLAN内パソコンのIPアドレス...
-
送信したデータの一部が文字化...
おすすめ情報