繁体   English   中英

通信套接字和VMware-Workstation存根时出现问题

[英]Issue in communicating socket and VMware-Workstation stub

我正在用Java实现套接字,以便与VMware-Workstation通信(版本:8.0.0 build-471780)。

我用以下方法创建套接字: Socket socket = new Socket("localhost",8832); ,因为我在本地运行虚拟机,因此8fa是VMware监听defalut进行调试的端口。 连接不会被拒绝或引发任何异常。 但是,在建立进程与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进程时,我的虚拟机会注意到调试器连接丢失,因此我可以说该连接已成功建立。

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

您可以尝试在不使用虚拟机的情况下在同一系统中运行该程序吗?

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

一种更安全的方法是使用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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM