TCP连接丢弃第一个字节

时间:2013-06-17 22:30:51

标签: java sockets

我正在尝试使用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,它总是正常工作?为什么会这样?

1 个答案:

答案 0 :(得分:3)

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

这让我们抓住了解释:

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

如果没有更多的信息/证据,这些解释都不合理。


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