1

質問はそれをすべて言います。ソケットをnullに設定するだけでなく、「.close()」メソッドを使用する方が良いですか? しかし、「.close()」メソッドが例外をスローすることはできません。そのときは、null に設定できますか?

ソケットを閉じたら、".close()" を呼び出した後、安全な方法でソケットを null に設定します。同じソケットを別の接続で再利用できますか? または、まったく新しいソケットを再作成する必要がありますか。

4

3 に答える 3

3

質問は無意味です。変数を null に設定しても、ソケットが GC の対象になる可能性があることを除いて、ソケットには何もしません。ソケットを閉じたい場合は、それを閉じるか、出力ストリームをラップした最も外側の出力ストリームまたはライターを閉じてください。これが例外をスローする可能性があるという事実は、あなたを思いとどまらせてはなりません。

于 2012-11-16T22:12:26.523 に答える
1

しかし、「.close()」メソッドが例外をスローすることはできません

可能性があるので、try/catch にも close() をラップします。close() が失敗した場合は、失敗しても問題ありません。作成しnullて続行します。

ソケットを閉じたら、".close()" を呼び出した後、安全な方法でソケットを null に設定します。同じソケットを別の接続で再利用できますか? または、まったく新しいソケットを再作成する必要がありますか。

ソケットを閉じると、ソケットの InputStream と OutputStream も閉じられます。ソケットが閉じられると、それ以上ネットワークを使用することはできません (つまり、再接続または再バインドすることはできません)。新しいソケットを作成する必要があります。

于 2012-11-16T22:07:46.413 に答える
0

はい、ソケットをnullに設定する前にソケットを閉じることをお勧めします。例外をスローするかどうかに関係なく、close を呼び出した後に null に設定しても安全だと思います。閉じる前に null に設定すると、ソケットはまだ存在し、後で jvm によって不明な時点で破棄されるまでポートを占有します。

はい、閉じた後に新しいソケットを作成する必要があります。

于 2012-11-16T22:14:24.063 に答える