
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ランキング
-
Cにおける通信プログラミングの...
-
TCP/IP通信時のサーバーからの受信
-
送信したデータの一部が文字化...
-
UDPの接続って?
-
UDP通信におけるbind関数について
-
【ajax】 XMLHttpRequestオブジ...
-
Socket通信の0バイト受信について
-
winsockでファイル転送
-
ソケット通信 同じポート番号...
-
socketプログラミングについて
-
UDP通信する時に、相手にどうや...
-
WinSockでチャット
-
VB6のwinsockでconnectできない
-
MFCソケットについて
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
Javascritpでソケット通信?
-
Connectエラーが出てしまう・・...
-
ソケット通信
-
Winsockで接続待ちタイムアウト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットでクライアントのipア...
-
ソケットを用いた1対多通信につ...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
相手のIPアドレスを取得する方法
-
recv関数でフリーズしてしまう
-
closeされたsocketへの動作につ...
-
送信したデータの一部が文字化...
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
Connectエラーが出てしまう・・...
-
WinSockでの通信プログラムがう...
おすすめ情報