我在尝试通过Java中的UDP套接字发送对象时收到此异常


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


这是发件人的代码:

public class Epl_Client implements Serializable{
public static void main(String[] args )
{
 try{
  ParseMessage pm = new PaseMessage();
  DatagramSocket Sock;
  Sock = new DatagramSocket();
  DatagramPacket Dp;
  ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(4 * 1024);
  ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
  objectOutputStream.writeObject(lg);
  byte[] objectBytes = byteArrayOutputStream.toByteArray();
  Dp = new DatagramPacket(objectBytes,   objectBytes.length,InetAddress.getByName("localhost"),9876);

  Sock.send(Dp);

    Sock.close();

 }
 catch (Exception e){
 System.out.println("exception caught" + e);
 }
}}


接收方代码:

public class ClassServer{
public static void main(String[] args){
    ParseMessage pm=new ParseMessage();

    try{
        byte[] recvBuf = new byte[5000];
        while(true){
                DatagramSocket serverSocket = new DatagramSocket(9876);
               ByteArrayInputStream bais = new ByteArrayInputStream(recvBuf);
               ObjectInputStream objectInputStream = new ObjectInputStream(bais);
               pm= (ParseMessage)objectInputStream.readObject();
               System.out.println(pm.message);
               bais.close();
               objectOutputStream.close();
              }
        }
        catch(Exception e)
        {
            System.out.println("Exceptiom"+e);
        }
}}


和班级

public class ParseMessage  implements Serializable{
  String message;
  public ParseMessage()
 { message="Inavalid";}}


谁能帮助解决此错误?

最佳答案

您实际上从未从套接字收到任何东西。查看您的代码-创建一个DatagramSocket,然后再也不要引用它。您总是在构建一个ByteArrayInputStream来包装一个由零组成的数组。

您需要调用DatagramSocket.receive,然后在构造ByteArrayInputStream时使用接收到的数据的长度。但是,您需要确定可以将所有数据放入单个数据包中。您确定不想要基于流的协议吗?

08-04 17:19