【问题标题】:UDP broadcasting dont work on android phone hotspot C#UDP广播在android手机热点C#上不起作用
【发布时间】:2017-11-19 19:20:52
【问题描述】:

我正在尝试在 xamarin android 中将 udp 包从一部手机广播到另一部手机 我在发件人上有这个代码:

                Socket brd = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                brd.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
                IPEndPoint ipe = new IPEndPoint(IPAddress.Broadcast, 9050);
                string host =  Dns.GetHostName();
                byte[] data = Encoding.Unicode.GetBytes(host);
                brd.SendTo(data, ipe);

我在接收设备上有这个代码:

            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
            sock.Bind(iep);
            EndPoint ep = iep;
            byte[] data = new byte[1024];
            int recv = sock.ReceiveFrom(data, ref ep);
            string stringData = Encoding.Unicode.GetString(data, 0, recv);

当我的 wifi 路由器网络上有两台设备时,这可以正常工作,但是当我在一台设备上使用热点时,另一台设备收不到任何东西!

我在 C# 控制台上尝试了相同的代码并将我的电脑连接到调制解调器,数据包接收良好,但是当电脑连接到手机热点时,广播不会再次收到,就像什么都没发生一样!

我做错了什么?我有更好的方法吗?

【问题讨论】:

  • 尝试获取所有网络接口并分别在每个接口上广播
  • @woelliJ tnx 它有所帮助,虽然我发现了另一个问题 :)) 热点和 pc 的 ip 范围有时不一样,但单独广播确实解决了我后期的问题

标签: c# android sockets xamarin.android


【解决方案1】:

您没有做错任何事,但通常情况下,手机会将自己与自己的热点网络隔离开来。它的行为可能看起来类似于路由器的行为,但它实际上并不是一个,并且它不会将自己定位为自己网络的客户端(就像路由器那样)。这是为了防止潜在未知客户端对设备的攻击尝试。

【讨论】:

  • 我刚刚意识到这已经很老了......哦,我希望这对某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多