我想将套接字绑定到本地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网络地址?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)