要实现Android到Android的远程访问,可以使用以下解决方法:
在发送端的代码:
String ipAddress = "192.168.0.100"; // 目标Android设备的IP地址
int port = 8080; // 目标端口号
try {
Socket socket = new Socket(ipAddress, port);
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
// 发送数据
String data = "Hello, Android!";
objectOutputStream.writeObject(data);
objectOutputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
在接收端的代码:
int port = 8080; // 监听的端口号
try {
ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
// 接收数据
String data = (String) objectInputStream.readObject();
System.out.println("Received data: " + data);
objectInputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
在服务端的代码:
public interface RemoteInterface extends Remote {
String sayHello() throws RemoteException;
}
public class RemoteImpl extends UnicastRemoteObject implements RemoteInterface {
public RemoteImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "Hello, Android!";
}
}
public class RemoteServer {
public static void main(String[] args) {
try {
RemoteInterface remoteObject = new RemoteImpl();
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("RemoteObject", remoteObject);
System.out.println("RemoteObject is bound and ready.");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
在客户端的代码:
public class RemoteClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("192.168.0.100", 1099);
RemoteInterface remoteObject = (RemoteInterface) registry.lookup("RemoteObject");
String result = remoteObject.sayHello();
System.out.println("Received result: " + result);
} catch (RemoteException | NotBoundException e) {
e.printStackTrace();
}
}
}
在上述代码中,服务端通过RMI将RemoteImpl对象绑定到Registry中,并提供给客户端调用。客户端通过Registry查找服务端的RemoteObject对象,并调用其中的方法。
以上是两种实现Android到Android的远程访问的常见方法,你可以根据具体需求选择合适的方法来实现。