【发布时间】: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