我试图发送一个广播UDP消息到C#应用程序。我已经尝试了下面的代码来发送消息。我在php.net网站上找到a comment到socket_sendto manual page。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();
任何想法可能是什么原因呢?
在这里工作。 'socket_sendto'的返回值是什么? – Artefacto
修复了这一切。我想我无法将UDP包发送到'255.255.255.255'范围内,而php服务器的ip地址在LAN范围内,例如'192.168.1。*'子网掩码为'255.255.255.0'。为了解决这个问题,我把包发送到'192.169.1.255'范围。解释为什么这实际上是这样的情况仍然欢迎虽然;) – Bravoman
@Artefacto再次尝试只是踢...返回值为'255.255.255.255'是一个正整数,即使UPD数据包没有达到我的客户端电脑。 – Bravoman