我试图为没有根的UDP数据包分配一个传出接口。
到目前为止我发现
我在Solaris上找到了IP_NEXTHOP,但显然它不在Linux中。
有什么想法吗?
发布于 2016-05-19 14:45:26
所以我在API级别22中找到了这个功能。
空bindSocket (DatagramSocket套接字)
将指定的DatagramSocket绑定到此网络。套接字上的所有数据通信将在此网络上发送,而不管bindProcessToNetwork(网络)设置的任何进程范围的网络绑定。插座不能连接。
您使用以下方法请求网络
void requestNetwork (NetworkRequest请求,PendingIntent操作)
请求网络以满足一组NetworkCapabilities。此函数的行为与接受NetworkCallback的版本相同,但使用的不是ConnectivityManager.NetworkCallback,而是PendingIntent。这意味着请求可能比调用应用程序更长,并在找到合适的网络时被调用。 该操作是一个意图广播,它将发送到您在registerReceiver(BroadcastReceiver,IntentFilter)或通过AndroidManifest.xml文件中的标记注册的广播接收器。 操作意图是通过两个附加程序传递的,一个网络类型的额外称为EXTRA_NETWORK,另一个称为NetworkRequest类型的额外,称为EXTRA_NETWORK_REQUEST,包含原始请求参数。在完成对保留网络的意图的处理之前,创建一个基于ConnectivityManager.NetworkCallback的新请求非常重要,否则它将在处理完后不久发布。 如果已经注册了对此意图的请求(与filterEquals(意图)定义的两个意图相等),那么它将被移除并替换,从而有效地释放以前的NetworkRequest。 请求可以通过调用releaseNetworkRequest(android.app.PendingIntent).来正常释放 目前不支持使用NET_CAPABILITY_VALIDATED或NET_CAPABILITY_CAPTIVE_PORTAL请求网络,因为这些NetworkCapabilities表示特定网络可能永远无法达到的状态,并且在提出网络之前还不知道网络是否会达到这些状态,因此框架不知道如何用这些功能来满足请求。 此方法要求调用方持有CHANGE_NETWORK_STATE权限或canWrite(上下文)确定的修改系统设置的能力。
因此,如果您请求当前可用的网络,则可以将套接字绑定到它。
https://stackoverflow.com/questions/37185520
复制相似问题