개체을 한 클래스에서 다른 클래스로 보내는 프로그램을 작성하고 있습니다. 다음은 문제를 나타내는 내 프로그램의 간단한 샘플 예제입니다. 보시다시피 서버에서 클라이언트로 보낼 객체는 각 클래스 (서버/클라이언트)에 별도로 정의 된 Student 클래스 입니다.자바에서 TCP를 통해 OBJECT를 보내는 방법은 무엇입니까?
: 여기Exception in thread "main" java.lang.ClassCastException: ServerSide$1Student cannot be cast to ClientSide$1Student
at ClientSide.main(ClientSide.java:29)
서버 측 코드입니다 : 나는 잘 작동하지만 난이 오류가 발생하고있어 자신에 의해 정의 된 클래스 유형에 올 때 ArrayList에 전송하여이 코드를 조사 하였다
그리고 클라이언트 측에 대한
import java.io.*;
import java.net.*;
public class ServerSide {
public static void main(String[] args) {
class Student implements Serializable
{
int id;
public Student(int num){id=num;}
public void setID(int num){id=num;}
public void Print(){System.out.println("id = " + id);}
}
try
{
Student a = new Student(3);
ServerSocket myServerSocket = new ServerSocket(9999);
Socket skt = myServerSocket.accept();
try
{
ObjectOutputStream objectOutput = new ObjectOutputStream(skt.getOutputStream());
objectOutput.writeObject(a);
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
은 다음과 같습니다
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientSide {
public static void main(String[] args)
{
class Student implements Serializable
{
int id;
public Student(int num){id=num;}
public void setID(int num){id=num;}
public void Print(){System.out.println("id = " + id);}
}
try {
Socket socket = new Socket("10.1.1.2",9999);
try {
ObjectInputStream objectInput = new ObjectInputStream(socket.getInputStream());
try {
Object object =(Student) objectInput.readObject();
Student tmp = (Student) object;
tmp.Print();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
편집 :
동일한 파일로 이동하고 일련 ID를 추가했습니다. 그것은 잘 작동합니다.
답장을 보내 주셔서 감사합니다하지만 불행히도 한 프로그램에서 다른 프로그램으로 전송할 개체의 다른 디렉터리를 사용해야하며 여기에 사양이 있습니다.나는 어떤 의견이라도 고맙게 생각한다 : http://tinypic.com/r/26279dt/6 – Bernard
그런 경우에는 내장 Java 직렬화를 사용할 수 없다. 다른 형식의 직렬화를 사용하거나 직접 작성해야합니다. 그들이 지정했다면 Java 직렬화를 사용해야 할 필요가 있는지 이해할 필요가 있습니다. –
@Bernard이 스펙에는 두 개의 Student 클래스가 필요하다는 것은 없습니다. – EJP