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

2023-11-21

我正在创建一个服务器客户端应用程序,其中服务器将 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(使用前将#替换为@)

java.io.StreamCorruptedException:无效的流标头:75720002 的相关文章

  • 上传进度条 Java Servlet?

    我想使用 servlet 显示上传进度条 我尝试过Ajax iFrame 技术 页面没有重新加载 文件也被上传 但是 进度条没有出现 有没有可用于 javaservlts 的 jQuery 进度插件 Thanks 我强烈推荐jQuery 上
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • “源兼容性”和“目标兼容性”有什么区别?

    之间有什么关系 区别sourceCompatibility and targetCompatibility 当它们设置为不同的值时会发生什么 根据工具链和兼容性 https docs gradle org current userguide
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 如何让 Firebase 与 Java 后端配合使用

    首先 如果这个问题过于抽象或不适合本网站 我想表示歉意 我真的不知道还能去哪里问 目前我已经在 iOS 和 Android 上开发了应用程序 他们将所有状态保存在 Firebase 中 因此所有内容都会立即保存到 Firebase 实时数据
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐