アプレットをクライアントとして、スタンドアロンのJavaアプリをサーバーとして(データセンターでホストされている専用マシン上で)、Javaでファイル転送アプリケーションを開発しようとしています。DataOutputStream/DataInputStream を使用して、両側でデータを転送します。大量のデータを送信すると、帯域幅は非常に変動します。最初はすべて問題ありませんが、何も転送されていない間に 40 ~ 50 秒間 TCP ストリームがフリーズし、その後再び開始します。
Ethereal で tcp ストリームを見ると、重複した ack、高速再送信、tcp 再送信が見られます。しかし、問題の原因が Java にあるとは思いません。FileZilla での FTP 転送にも同じ問題があります。しかし... netcat (netcat クライアント + netcat サーバー) を使用してデータを転送しようとすると、すべて問題なく、帯域幅は安定しており、転送されたボリュームに関係なく、tcp の失われたパケットは一時停止することなくすぐに再送信されるようです。
Java が netcat ほど tcp ストリームを操作する才能がなかったかのようです ...
Socket.setSendBufferSize() で遊んでみましたが、違いはわかりませんでした。何か案が ?
ありがとう !そして私の悪い英語でごめんなさい...