Trong Java, bạn có thể cung cấp số không là một tham số duy nhất cho bộ tạo Socket hoặc DatagramSocket. Java liên kết Socket đó với một cổng miễn phí sau đó. Có thể giới hạn tra cứu cổng cho một phạm vi cụ thể không?Làm thế nào để bạn chỉ định một phạm vi cổng cho các ổ cắm Java?
Trả lời
Hrm, sau khi đọc tài liệu, tôi không nghĩ bạn có thể. Bạn có thể liên kết với bất kỳ cổng nào, sau đó rebind nếu nó không được chấp nhận, hoặc liên tục liên kết với một cổng trong phạm vi của bạn cho đến khi bạn thành công. Phương pháp thứ hai sẽ là hiệu quả nhất.
Tôi lo lắng về câu trả lời này, bởi vì nó là ... không thanh nha, nhưng tôi thực sự không thể tìm thấy bất cứ điều gì khác hoặc là:/
Bạn cũng nên lưu ý rằng đôi khi có những tác động bảo mật khi thực hiện tìm kiếm tuyến tính cho một cổng miễn phí. Nếu bạn sử dụng cổng A cho máy khách 1 và cổng A + 1 cho ứng dụng khách tiếp theo thì máy khách 1 có thể đoán cổng bạn sẽ sử dụng cho một số ứng dụng khách khác. – Darron
Ràng buộc các ổ cắm vào bất kỳ cổng miễn phí (thường là) một tính năng của hỗ trợ socket của hệ điều hành; nó không dành riêng cho java. Solaris, ví dụ, hỗ trợ điều chỉnh phạm vi cổng tạm thời thông qua lệnh ndd. Nhưng chỉ root mới có thể điều chỉnh phạm vi, và nó ảnh hưởng đến toàn bộ hệ thống, không chỉ chương trình của bạn.
Nếu hành vi ràng buộc phù du thường xuyên không phù hợp với nhu cầu của bạn, bạn có thể phải tự viết bằng cách sử dụng Socket.bind().
Bạn có thể lướt qua mã java thực hiện chức năng bạn đang sử dụng. Hầu hết các thư viện java được viết bằng Java, vì vậy bạn có thể thấy những gì bạn cần ở đó.
Giả sử @Kenster đã đúng và đó là một thao tác hệ thống, bạn có thể phải lặp lại qua các cổng cố gắng liên kết với từng cổng hoặc kiểm tra nó. Mặc dù có một chút đau đớn, nhưng nó không nên nhiều hơn một vài dòng mã.
Dưới đây là đoạn code mà bạn cần:
public static Socket getListeningSocket() {
for (int port = MIN_PORT ; port <= MAX_PORT ; port++)
{
try {
ServerSocket s = new ServerSocket(port);
return s; // no exception means port was available
} catch (IOException e) {
// try the next port
}
}
return null; // port not found, perhaps throw exception?
}
Bạn nên bắt giữ BindException
, là thiết bị được khởi chạy khi cổng đã được sử dụng. –
Chochos
- 1. Ổ cắm Java - Cổng cục bộ
- 2. Làm thế nào để bạn tuôn ra ổ cắm Python?
- 3. Làm thế nào để thiết lập lại tùy chọn địa chỉ cho một ổ cắm datagram trong mã java?
- 4. Ổ cắm thiết lập cổng số nguồn
- 5. Phạm vi cổng được phép cho TCP
- 6. Làm thế nào để thiết lập cổng nguồn trong ổ cắm UDP trong c?
- 7. Làm thế nào để phục vụ một ổ cắm từ một ứng dụng Java EE?
- 8. Nhận cổng ngẫu nhiên cho ổ cắm UDP
- 9. Hành vi của ổ cắm Java khi đóng output stream
- 10. Làm thế nào để bạn chỉ định một số cổng khác nhau trong SQL Management Studio?
- 11. Làm thế nào để sử dụng tệp PEM để tạo một ổ cắm SSL trong Java?
- 12. Làm cách nào để bật chứng chỉ tự ký cho các ổ cắm SSL trên Android?
- 13. Làm thế nào để tràn bộ đệm ổ cắm Linux?
- 14. Làm cách nào để bật IPCOMP cho ổ cắm?
- 15. Nhiều kết nối trên cùng một ổ cắm cổng C++
- 16. Chỉ nhận một byte từ ổ cắm
- 17. Làm thế nào để thiết lập một ổ cắm Winsock UDP?
- 18. Python: Nhận một ổ cắm IPv6 để nhận các gói được định sẵn cho địa chỉ Subnet-Routers Anycast
- 19. Làm thế nào để xác định phạm vi trong YAML?
- 20. Làm thế nào để phát hiện bằng cách sử dụng C# nếu một ổ đĩa được cắm vào cổng USB?
- 21. Làm thế nào để làm tròn một số trong một phạm vi nhất định?
- 22. Làm thế nào để đóng (giết, giải phóng?) Một ổ cắm, trong trạng thái FIN_WAIT_2?
- 23. Làm thế nào để chấm dứt một sợi trong một phạm vi xem phạm vi đậu?
- 24. Ổ cắm Python +
- 25. Làm thế nào để ghi đè lên một phạm vi đậu cho các xét nghiệm?
- 26. Ổ cắm thô trong java
- 27. Ổ cắm TLS-PSK Java
- 28. Làm thế nào để giữ một ổ cắm mở cho đến khi khách hàng đóng cửa?
- 29. Chỉ định phạm vi cho eval() trong JavaScript?
- 30. Làm thế nào để bắt ConfigurationErrorsException cho vi phạm maxRequestLength?
Vâng, đối với người dùng không có đặc quyền đó đã được giới hạn đến> 1024 trên * nix: P – freespace
Đáng tiếc là chúng tôi đang chạy trên cửa sổ;) –