我有一台服务器和多个客户端,有时我在服务器上遇到此异常:
31.05 07:36:11 [Server] INFO java.io.UTFDataFormatException
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream$BlockDataInputStream.readUTFSpan(ObjectInputStream.java:3137)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3062)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2874)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1073)
31.05 07:36:11 [Server] INFO at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:717)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:831)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1602)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
31.05 07:36:11 [Server] INFO at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
31.05 07:36:11 [Server] INFO at com.mlg.server.server.ClientThread.run(ClientThread.java:47)
这是服务器的代码:
ClientThread (Socket socket, ObjectInputStream objectInputStream, ObjectOutputStream objectOutputStream) {
this.socket = socket;
this.objectInputStream = objectInputStream;
this.objectOutputStream = objectOutputStream;
}
@Override
public void run () {
while (isKeepGoing()) {
try {
Object o = objectInputStream.readObject(); <-- line 47
if (o instanceof ServerInCreateMLGPlayerPacket) {
// do something with it
continue;
}
} catch (Exception e) {
System.out.println("-------------------------");
System.out.println("--- " + e.getClass().getSimpleName() + " ---");
e.printStackTrace();
System.out.println("-------------------------");
keepGoing = false;
}
}
exit();
}
这是发送数据包:
private void sendPacket (Object o) {
try {
objectOutputStream.writeObject(o);
objectOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}
}