いくつか質問があります-
1. ソケット接続で接続された 2 台のコンピュータがあります。プログラムの実行時
outputStream.writeInt(value);
outputStream.flush();
実際にはどうなりますか?プログラムは、他のコンピューターが整数値を読み取るまで待機しますか?
2.outputStream
またはを空にするにはどうすればよいinputStream
ですか? outputStream
つまり、 orを空にすると、inputStream
そのストリームに書き込まれたものはすべて削除されます。(接続を閉じることを提案しないでください!)inputStream
この方法で空にしようとしました-
byte[] eatup=new byte[20*1024];
int available=0;
while(true)
{
available=serverInputStream.available();
if(available==0)
break;
serverInputStream.read(eatup,0,available);
}
eatup=null;
String fileName=(String)serverInputStream.readObject();
には他に何も書かれていないので、プログラムはその行を処理すべきではありませんoutputStream
。しかし、私のプログラムはとにかくそれを実行し、java.io.OptionalDataException
エラーをスローします。
注:私はクライアント サーバー ファイル転送プロジェクトに取り組んでいます。クライアントはファイルをサーバーに送信します。2 番目のコードはサーバー端末用です。サーバー側で「キャンセルボタン」が押された場合、からのバイトの読み取りを停止し、クライアントserverInputStream
にシグナル (私はint
-1 を使用) を送信します。クライアントがこのシグナルを受信すると、サーバーへのデータの送信を停止しますが、それがserverInputStream
空ではないことに気付きました。serverInputStream
したがって、クライアントコンピューターがサーバーコンピューターのファイルを再度送信できるように、これを空にする必要があります(そのため、read
メソッドからロックを管理できません)