通过 TCP/IP 接收对象

2023-12-02

我将通过 TCP/IP 编写一个程序,我应该通过客户端或服务器发送对象,当我想发送或接收字符串但当我尝试读取对象时,它会正常进行:

private Socket client;

public ThreadedClient(Socket client) {
    this.client = client;
}

@Override
public void run() {
        try {
            ObjectInputStream objIn = new ObjectInputStream(client.getInputStream());
            while(true){
                try {
                    Object fromClient = objIn.readObject();

                } catch (ClassNotFoundException e) {e.printStackTrace();}
            }
        } catch (IOException e) {e.printStackTrace();}
    }

我收到一个异常:

java.io.StreamCorruptedException: invalid stream header: 306E6165
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at org.bihe.serverSocket.ThreadedClient.run(Server.java:137)
    at java.lang.Thread.run(Unknown Source)

它指的是这一行:

    ObjectInputStream objIn = new ObjectInputStream(client.getInputStream());

这是我的服务器代码:

            ServerSocket ss = new ServerSocket(8800);
            while(true){
                Socket newClient = ss.accept();

                System.out.println(">>>> Client number " + (++counter) + " connected.");
                OutputStream outputStream = newClient.getOutputStream();
                PrintWriter sender = new PrintWriter(outputStream);
                sender.println(true);
                sender.flush();
                ThreadedClient client = new ThreadedClient(newClient);
                clients.add(client);
                new Thread(client).start();

客户端代码:

sc = new Socket("127.0.0.1", 8800);
            InputStream inputStream = sc.getInputStream();
            Scanner scanner = new Scanner(inputStream);
            boolean s = scanner.nextBoolean();
            if(s){
                System.out.println("Client connected successfully.");
                return true;
            }else{
                System.out.println("Ohhh, Some problem happened, try again later!");
            }

谁能解释一下发生了什么,这个异常是什么以及为什么我收到这个异常?


如果你想通过网络发送对象,你必须序列化你的对象。

检查这个问题:如何在 Java 中通过 TCP 发送对象

Java序列化:序列化

你可以这样做:

import java.net.*;  
import java.io.*;  

class testobject implements Serializable {  
  int value;  
  String id;  

  public  testobject(int v, String s ){  
       this.value=v;  
       this.id=s;  
    }  

}  

public class SimpleServer  {  
  public static void main(String args[]) {  
  int port = 2002;  
  try {  
    ServerSocket ss = new ServerSocket(port);  
    Socket s = ss.accept();  
    InputStream is = s.getInputStream();  
    ObjectInputStream ois = new ObjectInputStream(is);  
    testobject to = (testobject)ois.readObject();  
    if (to!=null){System.out.println(to.id);}  
    System.out.println((String)ois.readObject());  
    is.close();  
    s.close();  
    ss.close();  
}catch(Exception e){System.out.println(e);}  
}  
}  

import java.net.*;  
import java.io.*;  
   public class SimpleClient {  
   public static void main(String args[]){  
     try{  
     Socket s = new Socket("localhost",2002);  
     OutputStream os = s.getOutputStream();  
     ObjectOutputStream oos = new ObjectOutputStream(os);  
     testobject to = new testobject(1,"object from client");  
     oos.writeObject(to);  
     oos.writeObject(new String("another object from the client"));  
     oos.close();  
     os.close();  
     s.close();  
   }catch(Exception e){System.out.println(e);}  
  }  
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 TCP/IP 接收对象 的相关文章

  • 在 MongoDB Java 驱动程序中如何使用 $filter

    我有一个适用于 MQL 的查询 我需要将其翻译成Java MQL 中的查询如下所示 db
  • Spring Data:限制自定义查询的结果

    在我的 Spring 数据存储库中 我 必须 使用自定义查询 Query注解 我知道我可以限制这样的命名查询中的结果数量 Iterable
  • Java,将 null 分配给对象和仅声明之间有什么区别

    之间有什么区别 Object o null and Object o 仅声明 有人可以回答我吗 这取决于您声明变量的范围 例如 局部变量没有default values在这种情况下你将不得不分配null手动 在这种情况下实例变量分配 nul
  • 使用 java 的 RAR 档案 [关闭]

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

    As per JEP 295 http openjdk java net jeps 295 任何 JDK 模块 类或用户代码的 AOT 编译都是实验性的 JDK 9 中不支持 要使用 AOT 化的 java base 模块 用户必须编译该模
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • Java byte[] 与 String 之间的转换

    为什么这个junit测试失败了 import org junit Assert import org junit Test import java io UnsupportedEncodingException public class T
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • JSON 对象数组转 Java POJO

    将此 JSON 对象转换为 java 中的类 您的 POJO 类中的映射将如何 ownerName Robert pets name Kitty name Rex name Jake This kind of question is ver
  • 在Java中使用BufferedWriter写入文件时监视文件大小?

    我正在将一个可能很长的项目列表写入文件 我正在写的项目的长度是可变的 如果生成的文件大小大于10M 则应将其分成多个文件 为了提高性能 我目前使用 BufferedWriter 如下所示 final FileOutputStream fos
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • 我们必须将 .class 文件放在 Tomcat 目录中的位置

    我必须把我的 class文件在 Tomcat 目录中 在我的 Java Complete Reference 书中 他们告诉将其放入C Program Files Apache Tomcat 4 0 webapps examples WEB
  • 使用 Java 通过 HTTP 下载未知长度的文件

    我想用java下载一个HTTP查询 但是我下载的文件在下载时有一个未确定的长度 我认为这将是相当标准的 所以我搜索并找到了它的代码片段 http snipplr com view 33805 http snipplr com view 33
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • java 1.8下无法启动eclipse

    java 1 8 升级后我无法启动 eclipse 附上错误截图 这是我的 eclipse 配置设置 我该如何解决 startup plugins org eclipse equinox launcher 1 3 0 v20120522 1
  • Java .split("|") 不工作

    我刚刚遇到了一个问题分割法 http docs oracle com javase 6 docs api java lang String html split 28java lang String 29for 字符串不适用于字符 作为一个
  • 将变量从 jenkins 传递到 testng.xml

    我想根据从詹金斯传递的变量运行测试用例 例如 选择您要运行的测试用例 测试用例一 测试用例二 在 pom xml maven 中
  • Microsoft JDBC 中的 JTDS 属性相当于什么?

    我正在将 JTDS 连接更改为 Microsoft JDBC 并且我看到存在于http jtds sourceforge net faq html http jtds sourceforge net faq htmlMicrosoft JD
  • 如何修改生成的SOAP请求?

    我正处于创建输出拦截器并从 SOAP 消息中获取 OuputStream 的阶段 但是 如何在将 SOAP 信封发送到端点之前对其进行修改呢 我想删除一些 xml 元素 一种方法是获取文档并通过 XSLT 转换运行它 您可以通过调用来获取拦
  • Python 可以替代 Java 小程序吗?

    除了制作用于物理模拟 如抛射运动 重力等 的教育性 Java 小程序之外 还有其他选择吗 如果你想让它在浏览器中运行 你可以使用PyJamas http pyjs org 这是一个 Python 到 Javascript 的编译器和工具集

随机推荐

  • Windows Phone 7 如何上传图片到服务器

    我的代码想要将图片上传到服务器 如下所示 但总是失败 你知道为什么吗 public static void SendRequest System Text StringBuilder sReq byte sbyteData Action
  • Woocommerce 每种电子邮件类型都有不同的标头

    我使用 Woocommerce 需要根据其类型更改电子邮件标头 以便 customer new account php customer processing order php admin new order php 等等 它们必须有不同
  • 将纬度/经度转换为像素 XY 坐标

    这种类型的问题似乎已经被问过很多次了 但是发布的解决方案都没有让我接近我需要的答案 我有这张新西兰北国地图 我想将纬度 经度值映射到该图像上的 x y 像素 值 https i stack imgur com 3ok4O gif 这是400
  • C++ STL 中向量的恒定时间交换逻辑

    为什么交换两个 C STL 向量的内容所需的时间复杂度与相应向量的大小无关 参考 http www cplusplus com reference vector vector swap 典型的向量实现存储 分配器 指向第一个元素的指针 指向
  • 将 SmallInt 与 Ord 函数的结果进行比较时的警告

    我正在比较一个SmallInt变量与结果Ord功能 例子 var MySmallInt SmallInt begin MySmallInt 5 if MySmallInt gt Ord C then ShowMessage True els
  • 是否可以更改 C# 中的对象类型

    为了满足客户的要求 我遇到了一些问题 我将尽力使示例保持简单 只是给出问题的想法并希望提出解决方案 此时我们有一个类 Shape 例如 形状有一些特殊化 它可以是正方形 三角形等 到目前为止一切都很好 一切都很好 现在 出于某种原因 我的客
  • SRSS 2008 R2 的 C# 报表呈现器 - 缺少参数

    我正在使用 C 呈现来自 SRSS 2008 R2 的报告 该报告有参数 很长一段时间我在渲染输出时都没有问题 然而今天它决定行不通了 这是错误 ReportServerException This report requires a de
  • 根据生成构建文件时不可用的源文件在 CMake 中创建库

    我有一个构建两个库的 CMake 配置文件 第三方库 此处称为 ThirdPartyLib 包含来自供应商的实时操作系统 主板支持包 它是使用 autotools 工具链在 CMake 外部构建的 前一个库的扩展版本 此处称为 Extend
  • 为什么 Maven 在安装过程中可能会忽略更新的类?

    在进行 war 安装时 我在 Maven 2 2 1 安装中看到了奇怪的行为 有时 我会更新一个类 但更新的版本没有打包在 mvn install 生成的工件中 到目前为止 我已经确定在目标目录中生成了更新的 class文件 并且生成的 w
  • 在phantomjs中设置一个字符串作为网页的响应

    嗨 我想做的不是将网页获取为 page open url 而是设置一个已经作为页面响应检索到的字符串 可以吗 是的 就像分配给 page content 一样简单 通常还值得设置一个 page url 否则 如果使用 Ajax SSE 等进
  • WSO2 身份服务器电子邮件作为用户名

    我们目前正在评估 WSO2 身份服务器 我们想使用电子邮件地址作为用户名 默认情况下 用户名是 30 个字符 不够长 而且它必须同时支持两者 和用户名中的 有没有办法配置这个 用户存储是一个 JDBC Mysql 存储 Thanks 是的
  • 实时更新网页

    我正在制作一款类似于 Risk 的基于浏览器的多人回合制策略游戏 现在 最简单的方法似乎就是让它像普通网页一样 每次玩家刷新时 网页都会向数据库查询所需的信息 这是可以接受的 但我更愿意实时更新页面 这样玩家就不必不断刷新页面 我可以让网页
  • 导出 ES6 模块中的多个类

    我正在尝试创建一个导出多个 ES6 类的模块 假设我有以下目录结构 my module Foo js Bar js index js Foo js and Bar js每个导出一个默认的 ES6 类 Foo js export defaul
  • 在应用程序工厂之外访问 Flask 配置

    我目前正在使用带有蓝图的 Flask 应用程序工厂模式 我遇到的问题是如何访问应用程序工厂之外的 app config 对象 我不需要 Flask 应用程序中的所有配置选项 我只需要6把钥匙 因此 我当前执行此操作的方法是在调用 creat
  • 使用变量从 SSIS 执行进程任务运行 SQLCMD 脚本

    我有一个 sql 文件 其中包含包含 SQLCMD 元素的脚本 我需要让它从 SSIS 包运行 我无法从 执行SQL Task 根据这个http www sqlservercentral com Forums Topic818940 147
  • Python 神经网络中不需要的 [Nan] 输出

    这里是新手 刚刚从 JS 切换到 Python 来构建神经网络 但从中获得了 Nan 输出 奇怪的是我的 sigmoid 函数 似乎没有遇到任何溢出 但导数会导致混乱 import numpy as np def sigmoid x ret
  • 反向网格排列?

    我的右侧有一个侧边栏 左侧有内容 div class col md 9 p Main At large zoom currently it goes to top I want it to go to the bottom p div di
  • array_merge 和 array + array 有什么区别? [复制]

    这个问题在这里已经有答案了 一个相当简单的问题 有什么区别 merged array merge array1 array2 and merged array1 array2 这是一个简单的说明性测试 ar1 0 gt 1 0 a gt 1
  • Cocos2d 应用中的 NSTimer

    Cocos2d 文档中写道 使用 NSTimer 不是一个好主意 为什么不推荐使用NSTimer 我知道Cocos2d有一个schedule方法 尽量不要使用 Cocoa 的 NSTimer 而是使用 cocos2d 自己的调度程序 如果您
  • 通过 TCP/IP 接收对象

    我将通过 TCP IP 编写一个程序 我应该通过客户端或服务器发送对象 当我想发送或接收字符串但当我尝试读取对象时 它会正常进行 private Socket client public ThreadedClient Socket clie