※ ChatGPTを利用し、要約された質問です(原文:UDPプログラム、データの送受信)
UDPプログラム、データの送受信
このQ&Aのポイント
Javaを使って通信の勉強をしています。UDPを用いた通信のプログラムを作成しています。
送信側では、指定したバイト数を分割して送信する方法を使用しています。
受信側で複数のデータを受信する方法についてアドバイスを求めています。
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回受信しないからだとおもいます。
受信しなくなったらループを抜けるというようにすればよいとおもいますが、その方法が分かりません。
どなたかアドバイスをいただけないでしょうか?お願いします。
お礼
回答ありがとうございます。 提案していただいた案1でやってみようと思います。 時間内に届かなかったらループを抜けるというようにしたいです。 setSoTimeout();で時間を指定することは調べたのですが、 これをどう応用するのかわかりません。 アドバイスをお願いします。