![](/img/trans.png)
[英]java.net.BindException: bind failed: EACCES (Permission denied) when trying to create DatagramSocket for UDP connection
[英]ServerSocket in seperate thread throwing java.net.BindException: bind failed: EACCES (Permission denied) on Android
我正計划制作一個通過本地WiFi連接將文件從一部手機傳輸到另一部手機的應用程序。 我面臨的問題是,與台式機上的Java不同,嘗試將端口綁定到新的SocketServer實例時,Android上出現權限問題。
我按照人們的建議在單獨的線程中運行ServerSocket accept()
方法,並且我在AndroidManifest.xml
具有正確的權限。
這是我的代碼:
主要活動
package ga.ognjen.quicksend;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements Runnable {
private static TextView textView;
private Button button;
private Thread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
thread = new Thread(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
thread.start();
}
});
}
public static void setLabelText(String msg) {
textView.setText(msg);
}
@Override
public void run() {
Server server = new Server();
server.listen();
}
}
服務器
package ga.ognjen.quicksend;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private Socket socket;
private ServerSocket serverSocket;
public void listen() {
try {
serverSocket = new ServerSocket(44);
socket = serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
public int getPort() {
return socket.getPort();
}
public String getLocalAdress() {
return socket.getLocalAddress().toString();
}
}
Android清單
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ga.ognjen.quicksend">
<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" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
這可能是什么問題? 這是我的例外
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: java.net.BindException: bind failed: EACCES (Permission denied)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at libcore.io.IoBridge.bind(IoBridge.java:99)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:132)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at java.net.ServerSocket.<init>(ServerSocket.java:105)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at java.net.ServerSocket.<init>(ServerSocket.java:74)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at ga.ognjen.quicksend.Server.listen(Server.java:17)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at ga.ognjen.quicksend.MainActivity.run(MainActivity.java:36)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at java.lang.Thread.run(Thread.java:818)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: Caused by: android.system.ErrnoException: bind failed: EACCES (Permission denied)
03-14 22:27:40.533 27672-27748/ga.ognjen.quicksend W/System.err: at libcore.io.Posix.bind(Native Method)
03-14 22:27:40.537 27672-27748/ga.ognjen.quicksend W/System.err: at libcore.io.ForwardingOs.bind(ForwardingOs.java:56)
03-14 22:27:40.537 27672-27748/ga.ognjen.quicksend W/System.err: at libcore.io.IoBridge.bind(IoBridge.java:97)
03-14 22:27:40.539 27672-27748/ga.ognjen.quicksend W/System.err: ... 6 more
在基於Linux的系統上,低於1024的端口只能由具有超級用戶特權的應用程序打開。 請選擇更高的端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.