3

클라이언트 클래스와 서버 클래스 모두에서 Data라는 정확히 동일한 내부 클래스가 있습니다. 이 데이터 객체를 사용하여 서버로부터 전송되고 :ObjectInputStream readObject() : ClassNotFoundException

ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream()); 
output.writeObject(d); 

이 객체는 데이터 객체를 클라이언트 측에서 수신하여 주조된다 (d는 데이터 객체이다)

ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); 
Object receiveObject = input.readObject(); 
if (receiveObject instanceof Data){ 
    Data receiveData = (Data) receiveObject; 
    // some code here... 
} 

나는이 라인에 java.lang.ClassNotFoundException: TCPServer$Data납니다 Object receiveObject = input.readObject();

내 생각 엔 서버 측의 데이터 클래스를 찾을하려고하고 찾을 수 있다는 것입니다

그것, 그러나 나는 잘 모르겠다. 어떻게 해결해야합니까?

+2

데이터 내부 클래스의 코드가 중복 된 것으로 보입니다. 클라이언트 측에서는 어떤 클래스에 내부 클래스 데이터가 있습니까? 클라이언트 측에서도 TCPServer 클래스가 있습니까? – devang

+1

위 코드가 포함 된 클라이언트 클래스의 가져 오기를 보여줍니다. –

+0

데이터는 TCPServer.java 및 TCPClient.java에있는 내부 클래스입니다. 예외가 TCPClient.java에서 발생합니다. –

답변

7

는 다음의 라인을 따라 무언가이다. 대신이 작업을 수행하려고합니다.

class TCPServer { 
    /* some code */ 

} 

class TCPClient { 
    /* some code */ 

} 

class Data { 
    /* some code */ 

} 

그런 다음 Data 클래스가 클라이언트와 서버 프로그램에서 모두 사용 가능한지 확인하십시오.

+0

고맙습니다. 양쪽 데이터 클래스에 동일한 패키지 이름이 있어야한다고 가정합니다. –

+2

예, 정확하게 동일한 클래스 여야합니다. "com.test.Data"는 두 파일의 코드가 같더라도 "com.abc.Data"와 같지 않습니다. – Jyro117

+0

@ Jyro117 한 개의 라이너로 방금 2 시간 동안 답을 찾지 못했습니다. 감사합니다. –

3

두 개의 서로 다른 JVM에서 일부 클래스를 사용하고 클래스를 마샬링/언 마샬링 할 때 클래스는 공용 라이브러리로 내보내지고 서버와 클라이언트 모두에서 공유되어야합니다. 다른 수업을하는 것은 언제든지 일하지 않을 것입니다.

당신이하려는 것은 TCPServer $ Data를 마샬링하고 TCPClient $ Data로 언 마샬링하는 것입니다. 그것은 양립 할 수 없다.

class TCPServer { 
    /* some code */ 

    class Data { 

    } 
} 

class TCPClient { 
    /* some code */ 

    class Data { 

    } 
} 

그런 다음 당신이 tcpserver는 $ 데이터를 직렬화하고하여 TcpClient $ 데이터로를 unserialize하려고 : 당신이하려고했던 어떤