2012-02-24 25 views
7

Tôi muốn biết rằng một lần và cho tất cả. Thủ tục kết nối ổ cắm multicast là gì? Tôi biết bạn phải liên kết với một giao diện cục bộ (bạn cần IP và cổng cho điều đó?) Thì tôi biết bạn phải tham gia một nhóm (bạn cần IP: PORT cho địa chỉ bạn muốn tham gia và giao diện mạng một lần nữa! !! ??) và cuối cùng bạn có thể rời nhóm.Tôi có cần một PORT khi tham gia một nhóm phát đa hướng hoặc chỉ IP?

Ai đó có kinh nghiệm làm rõ toàn bộ những địa chỉ đó là gì? Tôi sẽ liệt kê dưới đây:

  • BindAddress (IP: PORT)
  • NetworkAddress (IP: PORT)
  • MulticastAddress (IP: PORT)

ở đâu và những gì là multicast nhóm đây?

Trả lời

5

Một nhóm multicast là một địa chỉ IP đặc biệt. Bạn tham gia nó qua setsockopt() bằng cách sử dụng tùy chọn ổ cắm IP_ADDMEMBERSHIP hoặc ví dụ: trong Java qua MulticastSocket.joinGroup(). Không có số cổng ở đây. Nếu bạn muốn tham gia qua một địa chỉ cụ thể của địa phương, hãy sử dụng quá tải chỉ định địa chỉ cục bộ hoặc gọi setNetworkInterface() trước tiên. Gắn kết với địa chỉ cục bộ là một hoạt động riêng biệt, chủ yếu xác định địa chỉ cục bộ nào mà ổ cắm có thể gửi và nhận dữ liệu trên: một hoặc tất cả chúng: một địa chỉ cục bộ xác định mạng con nào bạn đang sử dụng lắng nghe và có thể gửi qua, hoặc một cổng, hoặc cả hai. Thông thường, tốt nhất bạn nên sử dụng INADDR_ANY làm địa chỉ liên kết, trừ khi ứng dụng của bạn kỳ diệu biết về cấu trúc liên kết mạng.

Điều này bị lúng túng bởi thực tế là bạn có thể liên kết với một địa chỉ phát đa hướng trong Linux, nhưng điều này dường như là một sự hiểu lầm mà bây giờ sẽ luôn ở bên chúng tôi.

Bạn gửi đến một nhóm đa hướng bằng cách gửi đến địa chỉ phát đa hướng.

+0

Cảm ơn EJP, nhưng tôi vẫn không hiểu. DatagramChannelImpl.joinGroup của Java có một SocketAddress (với cổng). Vì vậy, tôi đoán bạn đang nói rằng địa chỉ multicast (IP) còn được gọi là nhóm multicast, phải không? Tôi muốn hiểu sự khác biệt và mục đích của ba địa chỉ: MulticastAddress, NetworkAddress và BindAddress. – chrisapotek

+0

@chrisapotek xem chỉnh sửa: điều đó có làm cho nó rõ ràng hơn không? – EJP

+0

@EJB Tôi đã mở hai câu hỏi bổ sung để bổ sung câu hỏi này. Tôi thực sự muốn hiểu điều này: Đây là họ: http://stackoverflow.com/questions/9468991/why-datagramsocketimpl-joingroup-method-takes-a-inetsocketaddress-if-the-port-do và http: // stackoverflow.com/questions/9469036/why-datagramsocketimpl-joingroup-method-take-a-networkinterface-if-the-socket-m – chrisapotek

0

Có, bạn phải xác định cả địa chỉ và cổng để gửi/nhận tin nhắn đa hướng. Đây là các gói UDP, do đó, chúng yêu cầu cả địa chỉ và cổng cho ngăn xếp mạng để có thể phân phối đúng các thông điệp đến các quá trình tham gia. Vì vậy, để lắng nghe một tập hợp các thông điệp multicast cụ thể, ứng dụng của bạn cần phải liên kết với một địa chỉ IP multicast cụ thể và kết hợp cổng (và rõ ràng là cho một bộ hoặc tất cả các giao diện trên máy). Nhóm được xác định bởi sự kết hợp địa chỉ/cổng.

Good quick explanation

Some sample source code in C and other languages

+0

Không phải của tôi, nhưng bạn chưa trả lời câu hỏi. Anh không hỏi về việc gửi và nhận, anh hỏi về việc tham gia. – EJP

+0

Tôi đã tìm kiếm nhiều hơn để hiểu vai trò (mục đích gì) của mỗi ba địa chỉ trong câu chuyện này. – chrisapotek

Các vấn đề liên quan