我正在使用 flutter 并利用 dart 中的 RawDatagramSocket 来发送 WOL 数据包。我的代码在 IOS 中运行良好,但在 Android 模拟器中我不断收到此错误
未处理的异常:SocketException:无法创建数据报套接字(操作系统错误:权限被拒绝,errno = 13),地址 = 0.0.0.0,端口 = 9
我的 Android list 中有这些权限,但我仍然无法让它停止错误:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
使用示例如下:
class WakeOnLanService {
Future wake(InternetAddress ipAddress, MacAddress macAddress, int port) {
return RawDatagramSocket.bind(InternetAddress.anyIPv4, port)
.then((RawDatagramSocket udpSocket) {
udpSocket.broadcastEnabled = true;
List<int> macBytes = macAddress.bytes;
List<int> packet = new List<int>(17 * 6);
for (int i = 0; i < 6; i++) packet[i] = 0xFF;
for (int i = 1; i <= 16; i++)
for (int j = 0; j < 6; j++) packet[i * 6 + j] = macBytes[j];
udpSocket.send(packet, ipAddress, port);
udpSocket.close();
});
}
}
最佳答案
要使用临时端口(如在 java 中,如注释中所述)只需传递 0 进行绑定(bind)。
return RawDatagramSocket.bind(InternetAddress.anyIPv4, 0)
没有记录,这是一个问题:https://github.com/dart-lang/sdk/issues/35147
引用:
If port has the value 0 an ephemeral port will be chosen by the system. The actual port used can be retrieved using the port getter.
关于android - 无法创建数据报套接字(操作系统错误 : Permission denied, errno = 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343158/