我正在尝试实现对象序列化但停留在StreamCorruptedException。

在服务器端:

public class MulticastServer {
                public static void main(String[] args) throws java.io.IOException {
                new MulticastServerThread().start();
                }
} 

哪个电话:

public class MulticastServerThread extends QuoteServerThread {
                 boolean moreQuotes=true;
public void run() {
  while (moreQuotes) {
  try {
    byte[] buf = new byte[256];
    String dString="Server";
    System.out.println(dString);
    buf = dString.getBytes();

    InetAddress group = InetAddress.getByName("230.0.0.1");
    DatagramPacket packet = new DatagramPacket(buf, buf.length,
                                               group, 4446);

    socket.send(packet);

    ObjectInputStream is=null;

    ByteArrayInputStream byteStream = new ByteArrayInputStream(recvBuf);
    is = new ObjectInputStream(new BufferedInputStream(byteStream));

    Object o1=(Object)is.readObject();
    System.out.println(o1.a);

    is.close();
    socket.close();
    }}}}

服务器和客户端上的Object类:

public class Object implements Serializable{
private static final long serialVersionUID=1L;
int a=10;
}

和客户端代码:

public class MulticastClient {
public static void main(String[] args) throws IOException {
MulticastSocket socket = new MulticastSocket(4446);
InetAddress address = InetAddress.getByName("230.0.0.1");
socket.joinGroup(address);

Object o1=new Object();

DatagramPacket packet;

for (int i = 0; i < 5; i++) {
  byte[] buf = new byte[256];
  packet = new DatagramPacket(buf, buf.length);
  socket.receive(packet);

  String received = new String(packet.getData());
  System.out.println("received data" +received);

  ObjectOutputStream os = null;
  ByteArrayOutputStream byteStream = new ByteArrayOutputStream(15000);
            os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
            os.flush();
            os.writeObject((Object)o1);
            System.out.println(o1.a);
            os.flush();
 }
 socket.leaveGroup(address);
 socket.close();
 }
 }

我做了这一切:

  1. 将所有类放在两台机器上的相同路径下
  2. 附加休息并尝试找出问题所在

有人可以帮帮我吗? 谢谢!

===============>>#1 票数:1 已采纳

如果您尝试通过UDP进行对象序列化,则需要将对象序列化为数据包的字节数组,并从接收端读取对象。 有一篇旧的Java World文章: 通过数据报包传输对象 ,您可能会发现它很有用。

看起来您想要实现双向通信:

server -> send packet
client -> receive packet
client -> send object
server -> receive object

我不确定这对你有多大帮助(特别是如果你有多个客户)。

但至少需要进行以下更改才能使任何工作:

  • 发送数据包后,您的服务器代码将需要执行阻塞receive调用。
  • 客户端代码需要在数据包中send对象。

  ask by P R translate from so

未解决问题?本站智能推荐:

3回复

java.io.StreamCorruptedException:无效的流头:7371007E

我有一个使用对象进行通信的客户端服务器应用程序。 当我仅将一个对象从客户端发送到服务器时,一切正常。 当我尝试在同一流上一个接一个地发送多个对象时 有人可以指导我找出此错误的原因吗? 客户端写方法 服务器读取方法 并且SecMessage类是
2回复

java.io.StreamCorruptedException:无效的流头:EFBBBFAC [重复]

这个问题已经在这里有了答案: 写入和读取多个对象以归档 3个答案 我正在用ObjectOutputStream和ObjectInputStream编写一个函数,以将联系人信息导入和导出到文件中。 我有一个异常java.io.StreamCorruptedExc
1回复

java.io.StreamCorruptedException:无效的流头:00000001简单项目

我的问题是,当我尝试反序列化信息时,我的项目(一个简单的清单,其中的项被序列化到一个文件夹,然后反序列化了)抛出了“ java.io.StreamCorruptedException:无效的流头:00000001”。 我以前没有问题; 但是,当我使用Finder(mac)手动删除序列化文件之
2回复

序列化:java.io.StreamCorruptedException:无效的流头:0AACED00

我是一名练习File IO技能的学生,遇到使用ObjectInputStream从文件读取对象的问题。 该代码始终抛出InvalidClassException,但我找不到代码如何将其在线或通过反复试验将其抛出。 这是我的代码: 我编写了所有单独的catch块,以找出引发了什么异常,
1回复

java.io.StreamCorruptedException:无效的类型代码:4C-复制流tomcat

我有以下代码该函数将对象写入tomcat提供的Replicationstream。 如果该对象不可序列化,那么我正在尝试编写“缺少值”。 以下代码读取对象。 如果对象不可序列化,则类似于读取,我尝试再次读取以读取“缺少值” 我正在跟踪错误,但我不太确定这是什么意思。 这两个
1回复

java.io.StreamCorruptedException:无效的流头:AC3F0005

我有一个小问题。 当我尝试反序列化KeyEvent时,它仅在一台机器上发生 我收到此错误: “ java.io.StreamCorruptedException:无效的流头:AC3F0005 在java.io.ObjectInputStream.readStreamHeade
4回复

java.io.StreamCorruptedException:无效的流标题:EFBFBDEF

我正在开发一个java web应用程序,我正在使用maven就像项目管理的工具,现在我对这个问题感到疯狂。 我尝试从我的应用程序构建一个jasper报告,这个报告由我在src / main / resources中的许多子报告组成。 我尝试以下列方式加载这些子报表: 问题是这个方法调
1回复

java.io.StreamCorruptedException:无效的流标题:75720002

我正在创建一个服务器 - 客户端应用程序,其中服务器将pdf文件发送到所有连接的客户端。 问题是我得到了这个错误,我搜索了一个解决方案,但无法得到任何解决方案。 这是错误 这是服务器发送代码: 这是接收代码的客户端: }
1回复

net.sf.ehcache.CacheException:java.io.StreamCorruptedException:无效的流头:00000000

我的问题是,当我第一次尝试运行该项目时,我的项目(一个简单的酒店管理项目)正在抛出“ net.sf.ehcache.CacheException:java.io.StreamCorruptedException:无效的流头:00000000”。 我不知道这个“ 00000000”? 我在项目
1回复

java.io.StreamCorruptedException:无效的流头:626F6775使用mysql blob,java对象和自定义对象

我正在开发一个需要将自定义类的对象存储到数据库中并能够检索该对象并在以后使用它的应用程序。 自定义类称为Quiz ,数据库为mySQL,我正在使用Blob存储对象。 我能够存储对象,但是当我尝试检索对象以供使用时,出现以下错误。 是的,我已经用谷歌搜索了。 我发现了一些类似的问题