1

我正在尝试使用 Java 7 64 位服务器 vm 从 Windows 7 向虚拟 Ubuntu 机器(oracle 虚拟机)发送几个字节。此代码在 Windows 上运行

ServerSocket server = null;
try {
    server = new ServerSocket(1024);
} catch(Exception e) {
    e.printStackTrace();
}
new Thread() {
    @Override
    public void run() {
        while(true) {
            try {
                Socket so = server.accept();
                //Thread.sleep(10);
                OutputStream out = so.getOutputStream();
                out.write(42);
                out.write(43);
                out.flush();
                out.close();
                so.close();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
}.start();

在 Ubuntu 上我运行这个

public class Client {
    public static void main(String[] args) throws Exception {
        Socket so = new Socket(args[0], Integer.parseInt(args[1]));
        InputStream in = so.getInputStream();
        int b = in.read();
        while(b >= 0) {
            System.out.println(b);
            b = in.read();
        }
    }
}

由于某种原因,有时会丢弃第一个字节。但是,如果我将 Thread.sleep 放入服务器代码中,它总是能正常工作吗?为什么会这样?

4

1 回答 1

3

我看不出客户端或服务器程序有什么问题。

这让我们抓住了以下解释:

  • 一方面是操作系统中的错误,
  • 虚拟网络设置中的错误,
  • 真正的网络错误,或
  • ... 一个假设的 JVM 错误。

如果没有更多信息/证据,这些解释都不能成立。


另一种可能性是某些东西干扰了到您的控制台的输出。尝试运行客户端并将输出重定向到文件...

于 2013-06-17T23:10:07.420 回答