在android < 11上,应用程序默认不能监听低于1024的TCP端口,除非具有root权限。但是,我们可以使用一些技巧来实现在没有root权限和USB连接的情况下监听TCP端口。
try {
ServerSocket serverSocket = new ServerSocket(8080);
Socket clientSocket = serverSocket.accept();
} catch (IOException e) {
// Handle exception
}
public class MyVpnService extends VpnService {
private ParcelFileDescriptor mInterface;
private Thread mThread;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Builder builder = new Builder();
builder.addAddress("10.0.0.2", 24);
builder.addRoute("0.0.0.0", 0);
try {
mInterface = builder.setSession("MyVPNService")
.setConfigureIntent(PendingIntent.getActivity(
this, 0, new Intent(this, MainActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT))
.establish();
} catch (Exception e) {
Log.e("TAG", "Error connecting to VPN", e);
stopSelf();
return START_NOT_STICKY;
}
mThread = new Thread(new Runnable() {
@Override
public void run() {
FileInputStream in = new FileInputStream(
mInterface.getFileDescriptor());
FileOutputStream out = new FileOutputStream(
mInterface.getFileDescriptor());
ByteBuffer packet = ByteBuffer.allocate(32767);
while (true) {
try {
int length = in.read(packet.array());