gpt4 book ai didi

java - 如何在 java 中通过 TCP 发送 OBJECT?

转载 作者:可可西里 更新时间:2023-11-01 02:44:14 25 4
gpt4 key购买 nike

我正在编写一个程序,将一个对象从一个类发送到另一个类。这是我的程序的一个简短示例,用于表示问题。如您所见,从服务器发送到客户端的对象是 Student 类 ,它已在每个类(服务器/客户端)中单独定义。 我通过发送一个 ArrayList 检查了这段代码,但当它涉及到我自己定义的类类型,我收到此错误:

Exception in thread "main" java.lang.ClassCastException: ServerSide$1Student cannot be cast to ClientSide$1Student
at ClientSide.main(ClientSide.java:29)

服务器端代码如下:

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();
}
}
}

编辑:

我将它们移动到同一个文件并添加了序列号。它工作正常。

最佳答案

拥有两个同名的类是不够的。这两个类需要有

  • 同一个包裹
  • 在同一个外部类中,如果有的话
  • 具有相同的 serialVersionUID。

我建议你有一个单一的、独立的类,它对客户端和服务器都是通用的。在更复杂的项目中,您可能会考虑在客户端和服务器模块都依赖的模块中构建这些通用组件。

关于java - 如何在 java 中通过 TCP 发送 OBJECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com