khi thiết lập ổ cắm qua dgram.createSocket('udp4');
và KHÔNG gắn nó vào cổng cụ thể Tôi nhận các gói đã phát được gửi đến 255.255.255.255 Nhưng khi tôi ràng buộc cùng một ổ cắm với IP cụ thể của giao diện của tôi this.server.bind(67, host);
Tôi sẽ KHÔNG nhận các gói được phát sóng này. Đây có phải là hành vi bình thường không?Nhận các gói được phát sóng khi nghe một cổng cụ thể
Trả lời
Các Javadoc for java.net.DatagramSocket nói:
Để nhận được broadcast gói tin một DatagramSocket nên bị trói buộc đến địa chỉ ký tự đại diện. Trong một số triển khai, các gói phát sóng cũng có thể được nhận khi một DatagramSocket bị ràng buộc đến một địa chỉ cụ thể hơn.
Đây là dấu hiệu rõ ràng cho thấy hành vi này phụ thuộc vào nền tảng, vì vậy các ổ cắm Javascript sẽ bị ảnh hưởng theo cùng một cách.
Theo thử nghiệm của tôi, Windows Vista 64 không hoạt động như được mô tả trong câu thứ hai (tức là không nhận được chương trình phát sóng trừ khi bị ràng buộc với INADDR_ANY).
Vâng, đây là hành vi do, mà không có một cảng hoặc giao diện, dgram.createSocket() sẽ:
ràng buộc đến địa chỉ "tất cả các giao diện" trên một cổng ngẫu nhiên (nó bên phải điều cho cả udp4 và udp6 socket).
- từ dgram API documentation trên nodejs.org
mà cho phép bạn chụp gói tin broadcast để bất kỳ cổng trên bất kỳ giao diện có sẵn.
Chứng minh cả giao diện và cổng để createSocket() hạn chế bạn chỉ chụp các gói đã được phát tới mạng được liên kết với giao diện được chỉ định trên cổng được chỉ định.
Bạn nên lưu ý rằng để nhận các chương trình phát sóng đến một giao diện cụ thể, chúng sẽ cần được gửi đến địa chỉ quảng bá trên/cho mạng mà giao diện đó phục vụ.
Vì vậy, nếu mạng của bạn là:
10.1.1.0
với một mặt nạ mạng của:
255.255.255.252
cũng là:
10.1.1.0/29 (CIDR notation)
địa chỉ quảng bá đúng là:
10.1.1.7
Với địa chỉ mạng và mặt nạ mạng của bạn, "Network and IP address calculator" của tuxgraphics.org là một công cụ bạn có thể sử dụng để xác định địa chỉ quảng bá chính xác cho mạng cụ thể của bạn.
Hành vi này phụ thuộc vào nền tảng. Xem ví dụ Stevens, Fenner, & Rudolf, * Lập trình mạng Unix, * Tập I, ấn bản thứ 3, tr. 532, và # 3.3.6 của RFC 1192 mà 'không chịu nổi' về vấn đề này. – EJP
- 1. Làm cách nào để nghe các gói phát sóng trên bất kỳ cổng nào?
- 2. Nhận các gói phát sóng UDP trên Linux
- 3. Nghe phát sóng Trước khi gỡ cài đặt ứng dụng
- 4. Không thể nhận android.intent.action.EVENT_REMINDER phát sóng
- 5. Lắng nghe phát sóng udp với thư viện tăng cường
- 6. Gửi một phát sóng duy nhất Hoạt động cụ thể
- 7. Java trên Linux: Nghe các tin nhắn phát sóng trên một địa chỉ cục bộ bị ràng buộc
- 8. Gói phát sóng UDP trên mạng con
- 9. Người phát sóng có thể nhận nhiều chương trình phát sóng không?
- 10. iOS có thể nhận các chương trình phát sóng như Android không?
- 11. Lỗi khi nhận sự cố ý định phát sóng
- 12. Có cách nào để biết liệu các chương trình phát sóng LocalBroadcastManager đã được nhận chưa?
- 13. android.net.wifi.WIFI_STATE_CHANGED không được phát sóng
- 14. Không thể nhận chương trình phát sóng trong ICS
- 15. Thẻ NFC Android nhận được với bộ phát sóng
- 16. MEDIA_MOUNTED chương trình phát sóng không được nhận
- 17. Tôi vẫn có thể nhận được ý định của người phát sóng phát sóng sau khi tôi buộc dừng ứng dụng của mình trên Android không?
- 18. phát sóng node.js + socket.io từ máy chủ, thay vì từ một khách hàng cụ thể?
- 19. Gửi chuyển hướng đến các cổng cụ thể
- 20. cách nhận tin nhắn văn bản đến cổng cụ thể ..
- 21. Nghe nhiều cổng từ một máy chủ
- 22. Không thể nhận được mục đích phát sóng của UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED
- 23. Từ nơi chúng tôi nhận được diễn viên người gửi khi nhận được một tin nhắn cụ thể?
- 24. phát sóng âm thanh/video từ android qua udp tới wifi và nghe với vlc
- 25. cách chụp gói tại một cổng cụ thể trên bất kỳ giao diện nào bằng tshark
- 26. Nhận 3 chương trình phát sóng Khi mạng được chuyển từ GPRS sang Wifi
- 27. VS2010 thay đổi cổng cụ thể một cách ngẫu nhiên
- 28. Trong C# làm thế nào tôi có thể nghe một cổng COM (Serial) đã được mở?
- 29. Gửi UDP phát sóng, nhận nhiều tin nhắn
- 30. Địa chỉ phát sóng Android
-1 vì câu hỏi này không liên quan gì đến Java. –
@RobRaisch Và một thú vị -1 cho bạn quá.Nếu bạn đã đọc câu trả lời của tôi đúng, bạn sẽ thấy rằng tôi đã trích dẫn Javadoc * làm bằng chứng cho thấy hành vi phụ thuộc vào nền tảng, và do đó nó ảnh hưởng đến Javascript, và thực sự tất cả các ngôn ngữ khác đều nhau. Xấu hổ bạn đã không nhận được nó lần đầu tiên. – EJP