【发布时间】:2011-10-18 14:07:55
【问题描述】:
我的问题是我有一个对象类(数据包),其中包含另一个对象(msg)。我让两个类都实现了可序列化。但是当我运行我的程序时,我在代码的某些部分看到了这个错误“java.io.StreamCorruptedException:无效类型代码:00”:
outStrm=new ObjectOutputStream(mySocket.getOutputStream());
inStrm=new ObjectInputStream(mySocket.getInputStream());
outStrm.writeObject(new packet());
outStrm.flush();
在服务器端我是这样读的
Socket client = listen_socket.accept();
in=new ObjectInputStream(client.getInputStream());
out=new ObjectOutputStream(client.getOutputStream());
p=(packet) in.readObject();
我发送了很多数据包,奇怪的是,当我调试它时(一步一步)我不会看到错误,但是当我运行它时,我有这个错误!请帮我。
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
class ServerThre
extends Thread
{
Socket client;
ObjectInputStream in;
ObjectOutputStream out;
public ServerThre(Socket client_socket)
{
client = client_socket;
try
{
in = new ObjectInputStream(client.getInputStream());
out = new ObjectOutputStream(client.getOutputStream());
}
catch (IOException e)
{
try
{
client.close();
}
catch (IOException e2)
{
}
System.err.println("Exception while getting input streams: " + e);
return;
}
this.start();
}
private packet getPacket() throws IOException
{
packet p;
try
{
p = (packet)in.readObject();
if (p != null)
{
return p;
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return null;
}
@Override
public void run()
{
while (!client.isClosed())
{
packet p = null;
try
{
p = getPacket();
}
catch (IOException e1)
{
e1.printStackTrace();
}
if (p == null)
{
System.out.print("Connection closed by server, exiting");
return;
}
}// end of while
}
}
【问题讨论】:
-
您需要发布您的代码和堆栈跟踪。问题在于您没有显示的代码,而不是您发布的 8 行代码。
-
我让我的两个类都实现了可序列化是真的吗?我的总代码很多。
-
让我们试试这个 - 阅读这个:SSCCE。创建一个演示您遇到的问题的文件。回来,发一下。没有人可以帮助你。您发布的代码段没有任何问题。