私が書いたクライアントサーバーアプリケーションは動作するようですが、すべてのデータが毎回処理されるわけではないようです。Java - ソケット上のデータを送信するUDP。すべてのデータ
Eclipseのenvでローカルマシンでテストしています。
サーバー:
private void sendData() throws Exception
{
DatagramPacket data = new DatagramPacket(outgoingData, outgoingData.length, clientAddress, clientPort);
InputStream fis = new FileInputStream(responseData);
int a;
while((a = fis.read(outgoingData,0,512)) != -1)
{
serverSocket.send(data);
}
}
はクライアント:
private void receiveData() throws Exception
{
DatagramPacket receiveData = new DatagramPacket(incomingData, incomingData.length);
OutputStream fos = new FileOutputStream(new File("1"+data));
while(true)
{
clientSocket.receive(receiveData);
fos.write(incomingData);
}
}
ときに、それは知っていたので、私はパケット長が512バイト以下であるかどうかをチェックする(真)whileループに他の場合は持っていましたブレーク;
私は今、私はほんの数分待ってからClient.javaアプリ
ファイルが転送を行いますが、元のファイルは、これまでに852キロバイトで、停止のためにそれは桶だったようだが、問題聖霊降臨祭があったことを考えていました私は777、800、850を持っていますが、決してそれのすべて。
ストリームをフラッシュしましたか? –
UDPは信頼できません。 UDPの仕様では、UDPは送信元から受信者へのパケットを取得するために "ベストエフォート"になりますが、パケットはドロップされ、受信者/送信者には通知されません。確実にデータを送信する必要がある場合は、何らかのパケットロス検出方式を実装するか、代わりにTCPを使用する必要があります。ローカルの意味で非常に多くのパケットを失っているのはちょっと奇妙ですが、ローカルのUDP接続が信頼できるものでなければならないという契約はありません。 – CodeBlind
私はそれを理解していますが、まだ私はできるだけ多くを得るためにどのように手伝ってくれるのか理解しようとしています。 –