我有用java編寫的服務器 - 客戶端對,如果另一個應用程序退出,我想退出一個應用程序。這是如何完成的? 如果用戶手動退出應用程序(即通過按cmd + q.alt + F4等),我還想知道如何讓程序執行一系列命令(例如關閉套接字等)。Java - Handle程序終止
回答
當一個人退出時,它會向另一個人發送消息,導致其退出。
一種方法是在遇到消息時導致接收器關閉的毒丸消息/對象。
通常做到這一點的方法是讓心跳線程單獨運行。這種工作方式是 -
每個客戶端上運行心跳線,並會定期發送信息到服務器實質上說,「我正在運行」。根據您的要求,您可以調整消息之間的時間間隔 。
服務器運行心跳監聽線程,並保持運行
一旦所有的客戶端停止發送郵件的服務器可以等待幾分鐘,然後正常關閉客戶端的列表。
這樣的設計可以工作了單個客戶端或多個客戶端。
我需要的,但這裏的問題是,網絡中的任何不可靠,你會「思考」的程序關閉時使用心跳的粉絲。 「網絡連接丟失」與「我退出服務器,我希望客戶端也退出」不一樣。我寧可發送一條消息「我正在下降,所以應該」,以便在使用心跳時打印出「網絡連接丟失」消息,以便正確退出。 – TacticalCoder
@ user988052:那麼如果你擔心網絡中的心跳消息丟失,那麼你如何確定「我要下去,所以你應該」消息將會到達服務器?此外,我們沒有考慮通過UDP發送心跳信號,我們正在使用內置可靠性的TCP套接字。除此之外,您還可以構建冗餘,例如如果超過1分鐘沒有收到心跳,服務器將關閉。這種方法比客戶端更好地告訴服務器我正在關閉,因爲客戶端可能會崩潰,並且可能永遠無法發送消息。 – Pushkar
網絡規則第一:*「網絡不可靠」*。 TCP與否,這被認爲是第一個也是最重要的網絡規則。然後,我*不*談論確保「下去」消息將到達服務器。我說的是服務器關閉時使用正確的消息。當然,如果在發送「正在下降」消息時網絡恰好處於關閉狀態,您可能會錯過一條消息,但以這種方式進行則不會有誤報。這與依靠網絡是可靠的(不是,這是網絡規則第一)是完全不同的。 – TacticalCoder
- 1. 的Java終止程序
- 2. 使用Java終止程序
- 3. 程序不會終止 - Java
- 4. 關於Java終止程序
- 5. 非終止Java程序2
- 6. Java - Eclipse IDE,由指針異常終止程序終止程序
- 7. 防止用戶終止Java程序?
- 8. Java程序與Java結果終止:137
- 9. 終止Java線程
- 10. Java線程終止
- 11. Java - 終止線程
- 12. Java終止或終止線程
- 13. Java程序的優雅終止和終止信號的記錄
- 14. 我的Java程序意外終止
- 15. 如何讓我的Java程序終止?
- 16. 如何在Java中終止程序?
- 17. 無法終止Java .txt寫入程序
- 18. 我的Java程序意外終止
- 19. Java Swing應用程序意外終止
- 20. 用java程序B終止一個java程序B
- 21. 可以終止另一個java程序的java程序
- 22. C++程序終止
- 23. 終止scala程序?
- 24. 程序終止accept()
- 25. C程序終止
- 26. 程序,不終止
- 27. 程序終止時用`exec`終止進程
- 28. Java線程並未終止
- 29. Boost線程終止程序?
- 30. 從終端自動終止java進程
有很多方法可以做到這一點...... –
當一個人退出時,它會向另一個人發送消息,導致其退出。 –
正如@ @奧格所說的,許多方法都是用它來表示它。只要確保你關閉你的套接字連接,無論你選擇哪種方式來解決它,以防止獲得套接字已綁定的錯誤下次運行你的代碼 –