情况如下: 我有一个ServerSocket ss,和“Socket socket = ss.accept();”,如果我这样做:
istream = socket.getInputStream();
ostream = socket.getOutputStream();
in = new BufferedReader(new InputStreamReader(istream));
out = new PrintWriter(new BufferedOutputStream(ostream));
/*
I use in/out few times
everything OK
*/
ObjectOutputStream oos = new ObjectOutputStream(ostream);
oos.writeObject(someobject);
/* probably code that solves the problem */
String line = in.readLine();
在客户端,我有这段代码:
PrintWriter out = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*
using in/out, no problems
*/
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
SomeObject so = (SomeObject)ois.readObject();
out.println("some text");
一切都很好,直到我发送一些对象。客户端正确接收对象,没有问题。但我不能再使用套接字了。如果我执行oos.close(),我会得到“套接字关闭”的异常。如果我做oos.reset()我得到类似消息的异常。 “套接字重置”。所以我该怎么做?在writeObject()之后可以使用相同的输入和输出流吗?
当我发送“一些文本”时会发生什么,无论我多少次调用readLine(),我都会得到空值,我从来没有得到“某些文本”。
答案 0 :(得分:0)
您不能在同一底层套接字上使用多种类型的流/读取器/写入器。你的所有流,读者和作者都被缓冲,所以他们都会彻底混淆。坚持口气。坚持一个协议。如果您有对象流,请将它们用于所有内容。并且在套接字的生命周期中创建它们一次,而不是根据消息创建它们。