2016-07-05 8 views
1

3gまたは他のネットワーク経由で要求が実行されていないことを確認するために、ローカルWi-Fiネットワークアドレスにソケットをバインドします。私はこのコードを試してみました:AndroidのローカルWi-Fiネットワークアドレスにソケットをバインドする方法は?

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: bind failed: EACCES (Permission denied) 私はマニフェストにパーミッションを確認しました。

<!-- 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" /> 

答えて

1

スーパーユーザーアクセスなしで1024未満のポートにバインドすることはできません。したがって、ポート80へのSocket.bind()は例外をスローします。 1024より大きいカスタムポートを選択します。たとえば、ほとんどのユーザーが起動したWebサーバーはポート8080を使用します。

関連する問題