两个模拟器之间的套接字连接



我想用套接字连接两个Android模拟器(都在同一主机上运行(。

我在其中一个服务器上运行了一台服务器,并侦听外部 IP 地址上的 7000 端口:

InetAddress addr = InetAddress.getByName("10.0.2.15");
ServerSocket serverSocket = new ServerSocket(7000, 50, addr);
try {
sock = serverSocket.accept();
} finally {
serverSocket.close();
}

以及连接到该端口的同一主机上不同模拟器上的客户端:

socket = new Socket();
socket.bind(new InetSocketAddress("10.0.2.15", 6666));
socket.connect(new InetSocketAddress("10.0.2.2", 7000));

我已将客户端绑定到 6666 端口,以便我可以进行必要的 adb 端口转发:

(host) .adb.exe forward --list
emulator-5554 tcp:7000 tcp:7000
emulator-5556 tcp:6666 tcp:6666

我可以通过调试器看到客户端套接字处于"已连接"状态,但调用:

dataInputStream = new DataInputStream(socket.getInputStream());
dataInputStream.available(); // this throws IOException Broken Pipe

抛出一个断管的IOException。

有什么想法问题出在哪里吗?

使用redir而不是adb forward似乎可以解决这个问题。

在服务器模拟器上

telnet locahost 5554
redir add tcp:7000:7000

在客户端模拟器上

telnet localhost 5556
redir add tcp:6666:6666

我真的不明白为什么会有区别,正如文档所述:

">Android 调试桥 (adb( 工具提供端口转发,这是您设置网络重定向的另一种方式。

最新更新