0

我正在用 Java 实现一个用于与 VMware-Workstation 通信的套接字(版本:8.0.0 build-471780)。

我使用: 创建套接字Socket socket = new Socket("localhost",8832);,因为我在本地运行虚拟机,并且 8832 是 VMware 通过默认值侦听调试的端口。连接没有被拒绝或抛出任何类型的异常。但是,我无法在我的进程和 VMware 存根之间建立通信。

这些方法不能有效地从存根发送或接收任何东西:

public void sendStr(String str) throws IOException {
        out.write(str.getBytes());
}
public String getStr() throws IOException, ClassNotFoundException {//blocking call
    byte[] byteArray = new byte[40];
    in.read(byteArray);
    return new String(byteArray);
}

第二种方法永远不会结束,因为它是一个阻塞调用。

当我终止 Java 进程时,我的虚拟机注意到调试器连接丢失,所以我可以说连接已成功建立。

有人可以在这里帮助我吗?我不知道该怎么办了。

4

1 回答 1

0

您可以尝试在同一系统中运行程序,而不使用虚拟机吗?

它不保存忽略返回值,read因为它可能无法读取完整长度。如果您希望收到与您发送的相同数量的“消息”,您的应用程序可能会挂起。这是因为 Socket 是一个字节流,您可以将任意数量的发送字符串组合或拆分。

更安全的方法是使用 DataOutput/InputStreams

final DataOutputStream out = 

public void sendStr(String str) throws IOException {
    out.writeUTF(str);
}

final DataInputStream in = 

public String getStr() throws IOException {//blocking call
    return in.readUTF(); // will return exactly on string.
}
于 2011-11-12T15:15:23.830 回答