我在尝试通过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
时使用接收到的数据的长度。但是,您需要确定可以将所有数据放入单个数据包中。您确定不想要基于流的协议吗?