2016-09-15 5 views
0

私はDatagramSocketを持っていますが、socket.receive()には、ソケットに送信されたパケットを格納するバッファがあります。私は、UDPを使用して信頼性の高いプロトコルを実装しようとしています、そして、私のウィンドウが一杯になった後、バッファを一度にアンロードすることができれば理想的です。私が単純なループをした場合、バッファが空の場合、socket.receive()は自分のプログラムをブロックしますが、私は望みません。JavaでDatagramSocketのバッファにアクセスすることは可能ですか?

バッファにアクセスする方法はありますか?

答えて

0

いいえ、非ブロックモードではDatagramChannelです。

-1

DatagramSocketにはバッファがありません。オペレーティングシステムのネットワークスタックにはバッファがありますが、アクセスすることはできません。私はUDP

を使用して信頼性の高いプロトコルを実装しようとしています

私はそれをしないアドバイスです - あなたはしかし、あなた自身のバグで、TCPを発明しまいます。

+0

「DatagramSocket」には実際にバッファがあり、あなたはその質問に答えていません。 – EJP

+0

答えはいいえです。それがいいえの理由は、バッファがないからです。 – Joni

0

は、一度にすべてのパケットをアンロードする本当の方法はありません...

特定のネットワークの割り当てによる今夜のようですね。私はソケットをタイムアウトに設定することをお勧めします(送信側が持つタイムアウト値の合計よりも小さい)し、ウィンドウ内でパケットを送信し、確認応答を受信することでループします。

関連する問題