我正在创建一个服务器客户端应用程序,其中服务器将 pdf 文件发送到所有连接的客户端。问题是我收到此错误,我寻找解决方案但找不到任何解决方案。这是错误
java.io.StreamCorruptedException: invalid stream header: 75720002
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at StudentThread.run(StudentThread.java:102)
这是服务器发送代码:
public void run()
{
try
{
String modifiedSentence;
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
inFromServer = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())), true);
//String sentence;
System.out.println("TeachID. "+id);
modifiedSentence = in.readLine();
System.out.println("Student "+id+" says:"+modifiedSentence);
arrS=modifiedSentence.split(" ");
out.println("Hello "+arrS[2]+","+id);
studName=arrS[2];
((DefaultListModel) Teacher.made_list.getModel()).addElement(studName);
while( true )
{
modifiedSentence = in.readLine();
arrS=modifiedSentence.split(" ");
if(arrS[0].equals("AcceptFile"))
{
try
{
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
byte[] buffer = (byte[])ois.readObject();
String pic="copyServer"+id+".pdf";
System.out.println(pic);
FileOutputStream fos = new FileOutputStream(pic);
fos.write(buffer);
fos.flush();
fos.close();
}
catch(Exception e)
{
System.out.println("Exception writing");
}
}
}
catch (IOException e)
{
}
finally
{
try
{
socket.close();
}
catch(IOException e)
{
}
}
}
public void sendF(String fn,Teacher teach)
{
try{
out.println("AcceptFile,");
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()) ;
FileInputStream fis = new FileInputStream(fn);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
//ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()) ;
oos.writeObject(buffer);
oos.flush();
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public void sendThread(String elem, Teacher teach)
{
out.println(elem);
//System.out.println ("Thread id is " + this.id);
System.out.println(this.socket.getInetAddress());
}
这是客户端接收代码:
public void run()
{
try
{
out=new PrintWriter(socket.getOutputStream(), true);
out.println("Hello Server "+name+",");
String modifiedSentence;
BufferedReader inFromServer = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
modifiedSentence = inFromServer.readLine();
System.out.println( modifiedSentence );
arrT=modifiedSentence.split(",");
if(arrT[0].equals("Hello "+name))
{
studId=Integer.parseInt(arrT[2]);
System.out.println("My Id="+studId);
}
while( true )
{
modifiedSentence = inFromServer.readLine();
System.out.println( modifiedSentence );
arrT=modifiedSentence.split(",");
if(arrT[0].equals("AcceptFile"))
{
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
byte[] buffer = (byte[])ois.readObject();
String pic="copyServer"+studId+".gif";
System.out.println(pic);
FileOutputStream fos = new FileOutputStream(pic);
fos.write(buffer);
fos.flush();
fos.close();
}
}
}
catch( Exception e )
{
e.printStackTrace();
}
}
BufferedReader
可以从套接字缓冲比您已读取的更多的数据。所以在客户端,你的标题byte[]
可能已被您读取并缓冲inFromServer
读者,并且您将无法使用ObjectInputStream
.
不要做那种事。要么“手动”完成所有编组(使用PrintWriter
/BufferedReader
对),或者通过对象序列化来完成这一切ObjectOutputStream
/ObjectInputStream
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)