いくつか質問があります-
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メソッドからロックを管理できません)