
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
VB6のwinsockでconnectできない
-
Connectエラーが出てしまう・・...
-
相手のIPアドレスを取得する方法
-
VB6‥ソケットについて
-
ソケットのクローズについて
-
VBのソケット通信(winsock)の...
-
ソケットを用いた1対多通信につ...
-
Winsockで接続待ちタイムアウト...
-
サーバーソケットを開いたまま...
-
ソケットでクライアントのipア...
-
WinSockを用いたUDP送受信ソケ...
-
closeされたsocketへの動作につ...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
UDPのソケットプログラミング
-
UDP通信する時に、相手にどうや...
-
TCP/IP通信でのコネクシ...
-
送信したデータの一部が文字化...
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
VB6のwinsockでconnectできない
-
Socket通信の0バイト受信について
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
Connectエラーが出てしまう・・...
-
送信したデータの一部が文字化...
-
【ajax】 XMLHttpRequestオブジ...
-
ソケット通信
-
closeされたsocketへの動作につ...
-
wsdlからのサービス化を行い。
-
Cにおける通信プログラミングの...
-
UdpClient 送信元のIPアドレ...
-
非ブロッキングソケットのrecv...
-
ソケットを用いた1対多通信につ...
おすすめ情報