我制作了一个通过 ObjectInputStream 从服务器接收数据的信使。我希望能够检索/发送可序列化文件,同时还能够从用户那里检索/发送消息。
我找不到一种在两者(对象和消息)之间进行排序而不引起消息冲突的好方法。
我尝试为同一个套接字使用两个流(Data*Stream 和 Object*Stream),它似乎建立得很好,但是当我尝试通过 Data*Stream 从服务器向客户端发送消息时,我开始java.net.SocketException: socket closed
使用我的客户。(仅在我发送消息时发生)
有人可以指出我将如何通过流检索两种不同类型的信息的正确方向吗?(没有采取简单的出路。我不想这样做writeObject("[message]"+input);
或任何像这样的廉价技巧。
(编辑)解决方案:
感谢 janos,他启发了我编写这段代码。:') 谢啦
输入接收器:
protected Object data;
public synchronized Object receivedData() throws ClassNotFoundException,
IOException {
data = in.readObject();
if(!(data instanceof String)) {
retrieveObject();
data = "";
System.out.println("Object");
}
return data;
}
和消息传递线程:
ExecutorService pool = Executors.newScheduledThreadPool(1);
private Runnable receiveData;
public void receiveData() {
receiveData = new Runnable() {
public void run() {
String input;
try {
while((input = (String) receivedData()) != null) {
if(input.length() > 1)
System.out.println(input);
}
}catch(IOException | ClassNotFoundException e){ e.printStackTrace();}
}
};
pool.execute(receiveData);
}
如果您有任何改进提示,请告诉我,我会更新此代码。