/ / Ako zatvorím port v prípade ukončenia programu? - java, multithreading, zásuvky, jvm

Ako zatvorím port v prípade ukončenia programu? - java, multithreading, zásuvky, jvm

Komunikáciu Socket používam v jednej z mojich Javaapplication.As viem, či program spĺňa akékoľvek neobvyklé ukončenie počúvanie porty nezatvorí a program nemožno spustiť späť, pretože hlási "Port už otvorené .." Musím napriek tomu tento problém vyriešiť? Aký je všeobecný spôsob riešenia tejto záležitosti?

odpovede:

22 pre odpoveď č. 1

Znie to, že váš program počúva na asocket. Normálne, keď váš program skončí, OS zatvorí všetky zásuvky, ktoré môžu byť otvorené (vrátane zásuviek na počúvanie). Pri počúvaní soketov si však OS normálne vyhradzuje port na určitý čas (niekoľko minút) po ukončení programu, aby zvládol všetky vynikajúce pokusy o pripojenie. Možno si všimnete, že ak program vypnete nezvyčajne, potom sa o nejaký čas vráti a spustí sa v poriadku.

Ak sa chcete vyhnúť tomuto oneskoreniu, môžete použiť setsockopt() na konfiguráciu soketu s možnosťou SO_REUSEADDR. Toto oznámi OS, že viete, že je to v poriadku na opätovné použitie tej istej adresy, a vy ste sa s týmto problémom nestretli.

Túto možnosť môžete nastaviť v Java pomocou ServerSocket.setReuseAddress(true) metóda.


4 pre odpoveď č. 2

Chcete nastaviť príznak SO_REUSEADDR na sokete

vidieť http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)


2 pre odpoveď č. 3

Po ukončení procesu JVM by mal operačný systém spracovať také veci automaticky. Pred zatvorením prístavu však môže dôjsť k oneskoreniu.


2 pre odpoveď № 4

Ako je uvedené v Spracovanie neobvyklých východov programu Java, môžete nastaviť Runtime.addShutdownHook () metóda, ktorá sa zaoberá akýmkoľvek osobitným prípadom, ak si to vyžaduje výslovnú operáciu.