我想在2臺計算機上做2路廣播系統。這是我第一次使用C++進行網絡編程。可以說我有計算機A和計算機B,每個計算機上聲明瞭2個套接字,每個計算機和客戶機上都有sd和sd1套接字,每臺計算機上都有服務器聲明。在計算機A上,在計算機A插座SD被綁定到的192.168.2.100:50000計算機A.客戶端IP然後,它使用從廣播計算機B接收信息:2路udp廣播問題,borland turbo C++
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
在計算機B,插座SD設置爲廣播使用:
setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
但由於廣播使用sd未綁定。計算機B上,然後用廣播向計算機中的信息:
sendto(sd, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
其中在計算機B上的聲明服務器IP 192.168.2.100:50000(與客戶端的IP在計算機A上,使得其廣播到IP)的。
上述方法在計算機B向計算機A廣播時工作正常。但是,當我試圖以相反方式執行相同操作時,計算機A向計算機B廣播,但它不起作用。在計算機A上,插座SD1聲明,並使用廣播設置:
setsockopt(sd1, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
和SD1不綁定和計算機A廣播到計算機B使用:
sendto(sd1, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
其中服務器被聲明爲IP 192.168。 2.2:40000(它是計算機B的客戶端IP地址,以便在那裏廣播)。在計算機B上,套接字sd1被聲明並綁定到客戶端,IP地址爲192.168.2.2:40000。計算機B收到的廣播使用:
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
我的apolgies長期的故事,但我需要儘可能清楚。任何人都可以告訴計算機B爲什麼不能接收來自計算機A的廣播嗎?
您是否檢查過返回值? setsockopt(... BROADCAST)可能會失敗。如果可能,我會盡量避免廣播。 – harper