我现在感觉真的很蠢....我基本上是在本地机器上连接TCP ...当我尝试在客户端制作输入/输出流时,它不会被传递创建对象输入流。是什么赋予了?打印后停止2 ...没有例外或任何事情......这不是我第一次使用这个课程,这也是我迷惑的原因。
try {
System.out.println("1");
mySocket = new Socket("localhost", 11311);
System.out.println("12");
oos = new ObjectOutputStream(mySocket.getOutputStream());
System.out.println("2");
ois = new ObjectInputStream(mySocket.getInputStream());
System.out.println("13");
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:6)
来自ObjectInputStream的specification:
此构造函数将阻塞,直到相应的ObjectOutputStream为止 写了并刷了头。
答案 1 :(得分:1)
(对于未来的读者:)我有同样的问题,因为我在服务器程序中做了一个愚蠢的改变,并且没有测试很长一段时间然后我很困惑为什么程序被锁定。
ServerSocket
接受连接(responderSocket = serverSock.accept();
)然后突然接受一个不合适的if
(我提到的愚蠢的改变!)程序跳出线程,因为我没有添加finally
阻止关闭流和套接字,套接字被遗弃,无需发送或接收任何内容(甚至是流标题)。所以在客户端程序中没有流标题(当我调试代码时,我看到锁定之前执行的最后一个函数是:
public ObjectInputStream(InputStream in) throws IOException {
verifySubclass();
bin = new BlockDataInputStream(in);
handles = new HandleTable(10);
vlist = new ValidationList();
enableOverride = false;
readStreamHeader(); //// <== This function
bin.setBlockDataMode(true);
}
readStreamHeader();
)
所以要小心服务器端会发生什么,也许问题不在你期望的地方!