2 台のコンピューターで双方向ブロードキャスト システムを実行しようとしています。初めてネットワーク プログラミングを行い、C++ を使用します。コンピューターAとコンピューターBがあり、それぞれに2つのソケットが宣言され、各コンピューターとクライアントにソケットsdとsd1、各コンピューターにサーバー宣言があるとしましょう。コンピューター A では、コンピューター A のソケット sd がコンピューター A の 192.168.2.100:50000 のクライアント IP にバインドされています。次に、ブロードキャスト コンピューター B から情報を受信します。
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 は、次を使用してコンピューター A に情報をブロードキャストします。
sendto(sd, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
ここで、コンピューター B で宣言されたサーバーの IP は 192.168.2.100:50000 です (コンピューター A のクライアントの IP と同じであるため、その 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 では、socket sd1 が宣言され、クライアントにバインドされ、IP 192.168.2.2:40000 で IP が自動的に取得されます。コンピューター B は、次を使用してブロードキャストを受信します。
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
非常に長い話で申し訳ありませんが、できるだけ明確にする必要があります。コンピューター B がコンピューター A からのブロードキャストを受信できない理由を誰か教えてもらえますか?