私は2台のコンピュータで2ウェイブロードキャストシステムを実行しようとしています。私の初めてのネットワークプログラミングとC + +で。私はコンピュータAとコンピュータBをそれぞれ2つのソケットが各コンピュータとクライアント上のソケットsdとsd1、各コンピュータのサーバ宣言を宣言していると言うことができます。2ウェイUDPブロードキャスト問題、ボウルランドターボC++
コンピュータB上のrecvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
、ソケットSDが設定されている:コンピュータA上で、コンピュータA上のソケットSDはその後、それが使用して放送コンピュータBからの情報を受信するコンピュータAで192.168.2.100:50000のクライアントIPにバインドされ
setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
ブロードキャスト使用のためにブロードキャストされません。コンピュータBは、使用してコンピュータに情報をブロードキャスト:
コンピュータB上の宣言サーバは(それがそのIPに放送するように、コンピュータA上のクライアントのIPと同じ)IP 192.168.2.100:50000であるsendto(sd, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
。
コンピュータBがコンピュータAにブロードキャストするとき、上記の方法はうまくいきます。しかし、逆に同じことをしようとすると、コンピュータAはコンピュータBにブロードキャストしますが、動作しません。コンピュータA上で、ソケットSD1が宣言され、使用して放送用セット:
setsockopt(sd1, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
をし、SD1がバインドされていないと、コンピュータBにコンピュータAの放送が使用して:サーバーがIP 192.168として宣言されて
sendto(sd1, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
。 2.2:40000(コンピュータBのクライアントIPアドレスでブロードキャストします)。コンピュータBでは、ソケットsd1が宣言され、IP 192.168.2.2:40000で自動的に取得されたクライアントとIPにバインドされます。非常に長い物語のために
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
マイapolgies、しかし、私はできるだけ明確にする必要があります:コンピューターBには、使用して放送を受信します。誰もコンピュータBがコンピュータAからのブロードキャストを受信できない理由について誰にも気付くことができますか?
戻り値を確認しましたか? setsockopt(... BROADCAST)が失敗することがあります。私はできるだけ放送を避けようとします。 – harper