我正在編寫一個程序,將對象從一個類發送到另一個類。這裏是我的程序的簡單示例來表示問題。正如您所看到的,從服務器發送到客戶端的對象是學生類,它已在每個類(服務器/客戶端)中分別定義。如何在java中通過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