我正在尝试向一个C#应用程序发送广播UDP消息。我尝试了以下代码来发送消息,该代码是在php.net网站上作为评论发布在socket_sendto手册页面上的。
<?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
的返回值是什么? - Artefacto192.168.1.*
,子网掩码为255.255.255.0
时,我无法将 UDP 数据包发送到255.255.255.255
范围。为了解决这个问题,我将数据包发送到192.169.1.255
范围。仍然欢迎回答为什么会出现这种情况的解释 ;) - Bravoman255.255.255.255
的返回值是一个正整数,尽管 UPD 数据包没有到达我的客户端电脑。 - Bravoman192.168.1.255
而不是192.169
;) - Bravoman