我目前正在C#/ Android客戶端/服務器項目上工作。發送廣播包問題
我有一個服務器應用程序,運行在Windows C#,它發送在端口的廣播消息8000。
的想法是客戶端應用程序(機器人)接收廣播,然後顯示該服務器的主機名和IP,從該消息通過廣播發送,在Android設備上供用戶選擇。
下面是我如何嘗試做廣播。
int availableTCPSocket = 0;
try
{
//UdpClient udp = new UdpClient();
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
availableTCPSocket = getAvailableTCPSocket();
//IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, BROADCAST_PORT);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.255"), BROADCAST_PORT);
XmlGenerator xmlGenerator = new XmlGenerator();
xmlGenerator.addStartElement("ServerInformation");
xmlGenerator.addElementString("Hostname", Dns.GetHostName());
NetworkAdapterDetails networkAdapterDetails = getNetworkAdapterDetails();
xmlGenerator.addElementString("IP_Address", networkAdapterDetails.ipAddress);
xmlGenerator.addElementString("MAC_Address", networkAdapterDetails.macAddress);
xmlGenerator.addElementString("AvailableTCPSocket", availableTCPSocket.ToString());
xmlGenerator.addEndElement();
xmlGenerator.flushAndCloseXmlWriter();
string udpData = xmlGenerator.returnXml();
byte[] sendBytes = Encoding.ASCII.GetBytes(udpData);
while (true)
{
//udp.Send(sendBytes, sendBytes.Length, endpoint);
socket.SendTo(sendBytes, endpoint);
Console.WriteLine("Broadcast Sent");
System.Threading.Thread.Sleep(5000);
}
}
catch (Exception ex)
{
Console.WriteLine("Broadcast Sender Exception: {0}", ex.Message);
}
如果我設置的端點被IPAddress.Broadcast它說,這是255.255.255.255
但我的設備從不接收廣播。
如果我將端點硬編碼爲192.168.1.255
,那麼我的設備會接收廣播。
因此,我有兩個問題。
如果我使用IPAddress.Broadcast爲什麼我的設備沒有收到任何東西,如果這應該是廣播。
如果192.168.1.255是正確的廣播地址,我怎樣才能找出什麼地址應該是動態的,這個想法是服務器將提供下載,所以必須工作在不同的網絡配置192.168.1.255可能不是正確的地址。
它也需要很長的時間的設備接收該數據包,服務器寫入每次向控制檯其環形輪和發送廣播,但它需要約4或5廣播來的設備之前被髮送收到它。它在WIFI網絡上,但在所有設備上都有強大的信號,在互聯網上下載60mb,在路由器和設備之間ping 2ms。
感謝您提供的任何幫助。