Tôi đang sử dụng giao tiếp Socket trong một trong các ứng dụng Java của mình. Tôi biết nếu chương trình đáp ứng bất kỳ chấm dứt bất thường nào thì cổng nghe không bị đóng và chương trình không thể khởi động lại vì báo cáo "Cổng đã mở .." Tôi có anyway để xử lý vấn đề này? Cách chung được sử dụng để xử lý vấn đề này là gì?Làm cách nào để đóng cổng trong trường hợp chấm dứt chương trình?
Trả lời
Có vẻ như chương trình của bạn đang nghe trên ổ cắm. Thông thường, khi chương trình của bạn thoát khỏi hệ điều hành, hãy đóng tất cả các ổ cắm có thể mở (bao gồm cả ổ cắm nghe). Tuy nhiên, để nghe các ổ cắm, hệ điều hành thường giữ cổng trong một thời gian (vài phút) sau khi thoát khỏi chương trình của bạn để nó có thể xử lý mọi nỗ lực kết nối chưa xử lý. Bạn có thể nhận thấy rằng nếu bạn tắt chương trình của bạn bất thường, sau đó trở lại một thời gian sau đó nó sẽ khởi động tốt.
Nếu bạn muốn tránh thời gian trễ này, bạn có thể sử dụng setsockopt()
để định cấu hình socket bằng tùy chọn SO_REUSEADDR. Điều này cho hệ điều hành biết rằng bạn biết có thể sử dụng lại cùng địa chỉ đó và bạn sẽ không gặp vấn đề này.
Bạn có thể đặt tùy chọn này bằng Java bằng cách sử dụng phương thức ServerSocket.setReuseAddress(true)
.
Hệ điều hành sẽ xử lý những thứ như tự động, khi quá trình JVM kết thúc. Có thể có một sự chậm trễ ngắn trước khi cổng được đóng lại, mặc dù.
Như đã đề cập trong Handling abnormal Java program exits, bạn có thể thiết lập phương thức Runtime.addShutdownHook() để xử lý bất kỳ trường hợp đặc biệt nào, nếu thực sự cần thao tác rõ ràng.
Bạn muốn đặt cờ SO_REUSEADDR trên socket
Xem http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
- 1. Chấm dứt Chương trình Python
- 2. Chấm dứt quá trình chạy với `exec` khi chương trình chấm dứt
- 3. Chấm dứt chương trình nhấn CTRL + C trong GDB
- 4. điều khiển chương trình chấm dứt nhắn trong nhật thực
- 5. python: làm thế nào để chấm dứt một luồng khi chương trình chính kết thúc
- 6. phát hiện chấm dứt chương trình (C, Windows)
- 7. Khi truy cập, có cách nào để thực thi mã khi chấm dứt chương trình không?
- 8. Trường hợp hủy bỏ() và chấm dứt() "sống"?
- 9. Làm cách nào để chấm dứt chuỗi trong C++ 11?
- 10. Quy trình con chấm dứt khi quá trình cha mẹ chấm dứt trong C#
- 11. Làm thế nào để đóng cửa sổ GLUT mà không chấm dứt ứng dụng?
- 12. Làm thế nào để chấm dứt chủ đề vô danh trong Delphi trên ứng dụng đóng?
- 13. Cách chấm dứt một quy trình trong vbscript
- 14. làm thế nào để mô phỏng trường hợp bất thường cho lập trình socket/tcp trong linux, chẳng hạn như chấm dứt một bên của kết nối?
- 15. Trong trường hợp nào Log.wtf của Android sẽ chấm dứt ứng dụng của tôi?
- 16. cách chuỗi chấm dứt trong java?
- 17. Xóa tệp được đảm bảo khi chấm dứt chương trình (C/C++)
- 18. phantomjs exit() không chấm dứt quá trình
- 19. "Safely" chấm dứt chương trình C++ đang chạy khi nhấn phím?
- 20. Lỗi Iphone Chấm dứt để phản hồi việc chấm dứt SpringBoard
- 21. Process.Close() không được chấm dứt quá trình tạo ra, C#
- 22. Làm cách nào để chấm dứt điều kiện một vùng song song trong OpenMP?
- 23. làm thế nào để chấm dứt một quá trình được tạo ra bởi CreateProcess()?
- 24. Làm thế nào để chấm dứt quá trình từ Python bằng cách sử dụng pid?
- 25. Làm thế nào để chấm dứt đúng quy trình con với đa xử lý trong python
- 26. Tràn bộ đệm - Chương trình chấm dứt sau khi sinh sản một vỏ
- 27. Làm cách nào để chấm dứt tất cả các quy trình bán phụ?
- 28. Chương trình Java chấm dứt bất ngờ mà không có bất kỳ thông báo lỗi nào
- 29. Có thể thoát() không chấm dứt quá trình không?
- 30. Tài nguyên giao dịch khi chấm dứt quá trình