java.lang.ClassNotFoundException: com.chat.data.SendTalkData

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:247)

at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603)

at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)

at com.chat.net.ChatServer$ClientHandler.run(ChatServer.java:124)

[접속자] 127.0.0.1

java.io.StreamCorruptedException: invalid stream header: 434E584E

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)

at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)

at com.chat.net.ChatServer$ClientHandler.run(ChatServer.java:121)



해결방법은 간단하다.


ObjectInputStream 및 ObjectOutputStream으로 서로 주고 받으려는 클래스가 위치한 패키지 이름이 서버와 클라이


언트에서 서로 같은지를 확인해보자.


나의 경우 안드로이드 클라이언트에서는 com.example.pmbs_client 패키지 내에 Header 클래스가 위치해 있었고,


자바서버에서는 server 패키지 내에 Header 클래스가 위치해 있었다.


그래서 서버와 클라이언트 모두 각각 shared 라는 패키지를 별도로 만들고 그 안에 Header 클래스를 넣어 두니 문제


가 해결되었다.



p.s) 참고로 ObjectInputStream 및 ObjectOutputStream으로 객체를 보내고자 할때 해당 클래스는 Serializable을 구


현해야 한다. 

+ Recent posts