问题是你所创建的数据流的顺序:
在文章的服务器中(我假设您正在使用的是),当打开一个新连接时,服务器首先打开输入流,然后打开输出流:
public Connect(Socket clientSocket) {
client = clientSocket;
try {
ois = new ObjectInputStream(client.getInputStream());
oos = new ObjectOutputStream(client.getOutputStream());
} catch(Exception e1) {
// ...
}
this.start();
}
注释的示例代码使用了相反的顺序,首先建立输出流,然后输入流:
// open a socket connection
socket = new Socket("localhost", 2000);
// open I/O streams for objects
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
但是你的代码做它周围的其他方法:建立一个输出流
server = new Socket(host, port);
in = new ObjectInputStream(server.getInputStream());
out = new ObjectOutputStream(server.getOutputStream());
/输入流对将停止,直到他们交换了握手信息,所以您必须匹配创建顺序。您可以通过在示例代码中交换第34行和第35行来完成此操作。
您需要取消注释。哈认真,但编译错误是什么? – 2009-01-22 23:53:44
有没有错误 - 它只是不工作与我未注释的代码,我不明白为什么?评论代码的作品 - 我刚分离,并把它放到一个实际的对象......这让我发疯。 – Malachi 2009-01-23 08:22:52