2011-07-11 30 views
3

ブロードキャストUDPメッセージをC#アプリケーションに送信しようとしています。私はメッセージを送るために次のコードを試しました。私はa commentからsocket_sendto manual pageにphp.netウェブサイトで見つけました。UDPブロードキャストをPHPから送信し、C#で受信する

<?php 
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1); 
socket_sendto($sock, $broadcast_string, strlen($broadcast_string), 0, '255.255.255.255', $port); 
?> 

これは私にとってはうまくいかず、多分私のネットワークです。

ブロードキャストIP '255.255.255.255'を私の特定のIPに置き換えると動作します。 '192.168.1.128'。私はWiresharkでこのメッセージが入ってくるのを見ることができますが、私は上記のコードを使って見ることができません。これは、コードのPHP側に何か問題があると私に信じさせます。

:私は()テストの終了を受けて)(C#の上で、次の使用

);私は本当に放送や私のプログラムのためのマルチキャストのいくつかの種類を使用したいので、私は現時点で立ち往生少しです

UdpClient subscriber = new UdpClient(15000); 

IPEndPoint ep = new IPEndPoint(IPAddress.Any, 15000); ; 

byte[] pdata = subscriber.Receive(ref ep); 
string data = Encoding.ASCII.GetString(pdata); 
MessageBox.Show(data); 
subscriber.Close(); 

何が原因である可能性がありますか?

+0

はこちらです。 'socket_sendto'の戻り値は何ですか? – Artefacto

+0

allreadyを修正しました。私は '255.255.255.255'の範囲にUDPパッケージを送ることはできないと思うが、PHPサーバのipアドレスはLANの範囲にある。サブネットマスクが「255.255.255.0」の「192.168.1。*」となります。この問題を回避するために、私はパッケージを '192.169.1.255'の範囲に送りました。 )なぜこれが実際にそうであるのかを説明する回答はまだあります;) – Bravoman

+0

@Artefactoはちょうどキックのためにもう一度試しました... '255.255.255.255'への返送値は、UPDパケットが私に届かなくても正の整数ですクライアントコンピュータ。 – Bravoman

答えて

1

スクリプトにMSG_DONTROUTEフラグを指定してみてください。このCodeGuru postからインスピレーションを得て、これが指定されていなければ、ルーターはメッセージをブロードキャストするかどうかを決定します。

socket_sendto($sock, $broadcast_string, strlen($broadcast_string), MSG_DONTROUTE, '255.255.255.255', $port); 
+0

私は[CodeGuruの投稿](http://www.codeguru.com/forum/archive/index.php/)を読んでいるので、 t-286258.html)これは私の元々の問題に対する解決策だと言わなければならないでしょう。ありがとう!今のところ、[回避策](http://stackoverflow.com/questions/6650719/udp-broadcast-send-from-php-and-recieve-in-c#comment-7860084)はまだ存在しているので、これはまだテストされていません。 – Bravoman

1

255.255.255.255は "限定的な"ブロードキャストですが、192.168.1.255は "有向の"ブロードキャストです。 単純な言葉で限定されているのは、それがLAN内でのみ送信されることを意味します。直接接続されたホストによって定義されるようなLAN、すなわち、ルータを介さない。ルータは例外ではありませんが、限られたブロードキャストを通過するのではなく、ダイレクトブロードキャストを通過させます。

最初の問題と質問では、ルータを経由してブロードキャストを送信していると推測できます。

関連する問題