【发布时间】:2013-05-22 20:40:20
【问题描述】:
我的服务器在线程中运行此代码,这样我就可以在等待客户端连接时与 GUI 进行交互。(目前我只使用 1 个客户端和 1 个服务器。)
@Override
public void run() {
Socket client = null;
MessageListener listener = null;
try {
client = server.accept();
oos = new ObjectOutputStream(client.getOutputStream());
ois = new ObjectInputStream(client.getInputStream());
listener = new MessageListener(ois);
(new Thread(listener)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
我的客户端运行此代码一次以连接到服务器并修复输入/输出流:
try {
ois = new ObjectInputStream(server.getInputStream());
MessageListener listener = new MessageListener(ois);
oos = new ObjectOutputStream(server.getOutputStream());
(new Thread(listener)).start();
} catch (IOException e) {
e.printStackTrace();
}
MessageListener 运行一个线程来检查传入的消息。
@Override
public void run() {
while (true) {
Message message = null;
try {
message = (Message) in.readObject();
if (message != null) {
System.out.println(message.getName());
}
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
}
但是,当我启动我的程序时,起初我只能从服务器发送到客户端,而不是相反(我无法与客户端 GUI 交互)。 将第一条消息从服务器发送到客户端后,我会收到以下错误消息:
java.io.StreamCorruptedException: invalid type code: 6F
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.jale.chat.iohandling.MessageListener.run(MessageListener.java:25)
at java.lang.Thread.run(Unknown Source)
编辑:在我收到第一条错误消息后,我只能从客户端发送到服务器(发送确实有效),但错误消息不断向我的控制台发送垃圾邮件。
MessageListener 的第 25 行:
message = (Message) in.readObject();
在 google/Stack Overflow 上没有找到任何东西,因为获得StreamCorruptedException 时的一般问题似乎是人们为单个套接字打开多个InputStreams 或OutputStreams,但我没有这样做。任何帮助将不胜感激。
【问题讨论】:
标签: java sockets inputstream outputstream