在 `onCreate` 中直接 `new DatagramSocket(50000)` 拋出 `SocketException`,真機測試同樣失敗,換端口無效。Java 專案卻正常。
Android 主執行緒(UI 執行緒)禁止執行網路 I/O 操作(API 9+ 嚴格模式會拋 `NetworkOnMainThreadException`,舊版直接失敗)。必須在子執行緒中建立 Socket 並收發資料。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(() -> {
try {
DatagramSocket socket = new DatagramSocket(50000);
// 收發邏輯...
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); // 阻塞等待
// 處理資料...
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
<uses-permission android:name="android.permission.INTERNET"/>。將網路操作移出主執行緒,即可解決 `DatagramSocket` 建立失敗問題。