/ / Uruchamianie programu kolejno na tym samym porcie - Java, Linux, Sockets, Centos, Thrift

Uruchamianie programu po kolei na tym samym porcie - java, linux, gniazda, cento, oszczędzanie

Korzystam z kodu Java na CentOS 5

java Something.java &

który tworzy gniazdo na określonym porcie .... powiedzmy 9090.. jednak kod nie działa całkowicie, więc ja Ctrl-C z tego.

Gdy próbuję ponownie uruchomić program, wyświetla się komunikat o błędzie informujący, że nie można połączyć się z portem 9090.

Kiedy zmieniam numer portu na jakąś dowolną rzecz 9010... wszystko działa ponownie (oprócz tego, że Something.java utknie) .... odejść i powtórzyć

Co się dzieje? Chciałbym móc używać jednego spójnego portu do tych rzeczy ... czy jest jakiś proces w tle, którego nie pozbywam się za każdym razem?

Dzięki!

Odpowiedzi:

2 dla odpowiedzi № 1

Może się tak zdarzyć, ponieważ system operacyjny ma pewne opóźnienie kwarantanny, zanim inny proces może ponownie użyć adresu.

Biblioteka C udostępnia opcję gniazda SO_REUSEADDR które można ustawić, aby tego uniknąć. Wskazuje na to szybkie wyszukiwanie w Internecie setReuseAddress(boolean) w java.net.ServerSocket można użyć do ustawienia tej opcji.


0 dla odpowiedzi nr 2

JVM może zająć trochę czasu, aby zakończyć program i zwolnić gniazdo.

Możesz ręcznie zamknąć gniazdo, gdy oprogramowanie jest zakończone przez ctrl-c za pomocą Runtime.getRuntime().addShutdownHook(...), które bardzo polecam dla wszystkich programów działających w tle i korzystających z gniazd. Powinno pomóc.