java-如何将套接字绑定到Android上的本地wifi网络地址?

java-如何将套接字绑定到Android上的本地wifi网络地址?,第1张

概述我想将套接字绑定到本地wifi网络地址,以确保请求未通过3g或其他网络运行.我尝试了这段代码:publicstaticStringgetIpAddress(WifiManagerwifiManager){WifiInfowifiInfo=wifiManager.getConnectionInfo();intipAddress=wifiInfo.getIpAddress();return

我想将套接字绑定到本地wifi网络地址,以确保请求未通过3g或其他网络运行.我尝试了这段代码:

public static String getIpAddress(WifiManager wifiManager) {    WifiInfo wifiInfo = wifiManager.getConnectionInfo();    int ipAddress = wifiInfo.getIpAddress();    return String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),            (ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));}Socket socket = new Socket();String localipAddress = getIpAddress(wifiManager);socket.bind(new InetSocketAddress(localipAddress, 80));socket.connect(new InetSocketAddress(serverHostname, serverPort), (int)   timeoutMs);

它抛出:
java.net.BindException:绑定失败:EACCES(权限被拒绝)
我在清单中检查了权限.看起来所有必要的权限都被授予:

<!-- Uses: show 'disconnected' message when not connected to the internet --><uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE"/><!-- Uses: record wifi network name when setting up a device --><!-- Uses: device wifi setup --><uses-permission androID:name="androID.permission.ACCESS_WIFI_STATE"/><!-- Uses: device wifi setup --><uses-permission androID:name="androID.permission.CHANGE_NETWORK_STATE"/>    <uses-permission androID:name="androID.permission.CHANGE_WIFI_STATE"/><uses-permission androID:name="androID.permission.INTERNET" />

解决方法:

如果没有超级用户访问权限,则无法绑定到1024以下的端口.因此,端口80的Socket.bind()引发了异常.选择一个高于1024的自定义端口.例如,大多数用户启动的Web服务器使用端口8080.

总结

以上是内存溢出为你收集整理的java-如何将套接字绑定到Android上的本地wifi网络地址?全部内容,希望文章能够帮你解决java-如何将套接字绑定到Android上的本地wifi网络地址?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存