2010-07-12 70 views
5

Tôi có một máy tính có hai card mạng được kết nối với các mạng khác nhau (thiết lập mạng đa homed). Tôi muốn gửi các khung phát sóng UDP trên cả hai mạng. Địa chỉ IP của người gửi phải là địa chỉ IP của bộ điều hợp, được sử dụng để gửi khung. Địa chỉ đích phải là địa chỉ LIMITED BROADCAST.Gửi phát sóng UDP trên Windows 7

Ứng dụng khách hàng không được chạy với quyền quản trị (UAC không được chấp nhận).

Làm cách nào để gửi các khung UDP này tới địa chỉ LIMITED BROADCAST (255.255.255.255)? Làm cách nào để gửi các khung này đến địa chỉ NETWORK BROADCAST (x.y.z.255)?

Tôi biết cách làm điều này với ổ cắm thô. Nhưng ổ cắm thô chỉ có thể được sử dụng với quyền quản trị.

Trả lời

3

Bạn không thể mở hai ổ cắm UDP bình thường và gắn một ổ cắm vào mỗi địa chỉ giao diện và sau đó chỉ cần gửi đến địa chỉ quảng bá?

Điều này, theo như tôi biết, xử lý việc gửi trên cả hai mạng và nó sẽ đảm bảo rằng các gói được gửi sẽ có địa chỉ ip chính xác. Nó sẽ không hoạt động nếu bạn liên kết một ổ cắm duy nhất với INADDR_ANY, tất nhiên, S work sẽ hoạt động nếu chỉ có một bộ điều hợp mạng duy nhất trong máy. Để tạo ra một giải pháp hoàn chỉnh, có lẽ tốt nhất là lặp lại qua các địa chỉ có sẵn và tạo một socket cho mỗi địa chỉ, liên kết với nhau và gửi từ mỗi địa chỉ.

+1

No. Ràng buộc ổ cắm ảnh hưởng đến việc các gói nhận được chấp nhận bởi ổ cắm này. Các gói tin được gửi sẽ được định tuyến theo các quy tắc định tuyến IP. Tôi có thể lặp lại các bộ điều hợp và các địa chỉ IP liên kết với các bộ điều hợp này và gửi một phát sóng mạng cho mỗi địa chỉ IP. Nhưng điều này không gửi đến địa chỉ LIMITED BROADCAST. – harper

+0

Bạn có chắc chắn không? Khi bạn phát hành một SendTo, socket được kết nối hoàn toàn với socket cục bộ được sử dụng để gửi đi để người nhận có thể trả lời. Bạn có thể thấy điều này trong hành động vì bạn không thể thực hiện RecvFrom mà không cần ràng buộc hoặc gửi trước trên socket ... Nếu bạn có hai giao diện có thể cả hai định tuyến đến cùng một đích thì hệ điều hành chọn một nếu bạn không bị ràng buộc. Bạn có thể liên kết trước khi phát hành một SendTo để chọn địa chỉ cục bộ. –

+0

Ah, tôi hiểu rồi. Bạn đúng! Trong Windows 7, lệnh bind() ảnh hưởng đến việc nhận và truyền tải các khung. Đây là một sự khác biệt đối với hành vi của Windows XP, nơi các khung đã được gửi với bất kỳ địa chỉ bộ điều hợp tùy ý nào cho tất cả các bộ điều hợp. Bạn cần các ổ cắm RAW với Windows XP để gửi một địa chỉ nguồn thích hợp. Nhưng Windows 7 gửi LIMITED BROADCASTS tới bộ điều hợp mà ổ cắm bị ràng buộc. Cảm ơn rất nhiều, Harper – harper

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