可能的原因:
Android 系统版本限制。Android 3.0 以上版本的系统禁止通过主线程来访问网络,你需要使用 AsyncTask 或者 Handler 来实现异步的网络连接。
端口被占用。在创建端口监听之前,需要确保该端口不存在任何其他应用程序正在使用。
解决步骤:
下面是一个使用 Handler 的示例代码:
public class ServerThread extends Thread { private Handler handler;
public ServerThread(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(8080);
Log.i("ServerThread", "Server started");
handler.sendEmptyMessage(0);
while (true) {
Socket socket = serverSocket.accept();
Log.i("ServerThread", "Socket accepted");
handler.sendEmptyMessage(1);
// Do something with the socket
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在 MainActivity 中,可以创建一个 Handler 实例,以便从 ServerThread 中接收消息,如下所示:
public class MainActivity extends AppCompatActivity { private Handler handler = new Handler() { @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case 0: Log.i("MainActivity", "Server started"); break; case 1: Log.i("MainActivity", "Socket accepted"); break; } } };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ServerThread serverThread = new ServerThread(handler);
serverThread.start();
}
}
这样,应用程序将会在8080端口上监听客户端的连接。