【问题标题】:The int values i send throug socket is different from int values received (Java)我通过套接字发送的 int 值与收到的 int 值不同(Java)
【发布时间】:2020-08-25 22:49:26
【问题描述】:

我正在使用 JDK8 在 android studio 项目上运行的套接字的输出流上发送 2 个 int 值,方法是这样做:

        try {
            System.out.println("AFTER THREAD START");
            System.out.println("WRITE AGE : " + age + " WRITED SEX : " + sex);
            output_stream_request.writeInt(age);
            output_stream_request.writeInt(sex);
            output_stream_request.flush();
            System.out.println("WRITE AGE : " + age + " WRITED SEX : " + sex);
        } catch (IOException e) {
            e.printStackTrace();
        }

我在输入端接收它们,在一个使用 JDK8 的 ant 项目上,这样做:

try {
            System.out.println("BEFORE_READ");
            boolean valid_data = false;
            int age = 0;
            int sex = 0 ;

            age = connector.get_dis_request().readInt();
            sex = connector.get_dis_request().readInt();
            System.out.println("AGE : " + age + " SEX : " + sex );

我用不同的值执行了很多次,我得到了这些结果:

发送: 年龄 : 50 性别 : 200 // 接收 : 年龄:-1174405120 性别:838860800

发送: 年龄 : 50 性别 : 201 // 接收(同上): 年龄:-1174405120 性别:838860800

发送: 年龄:2 性别 : 200 // 接收 : 年龄:-1174405120 性别:33554432

发送: 年龄:2 性别 : 201 // 接收(同上): 年龄:-1174405120 性别:33554432

请注意,收到的年龄值永远不会改变 并且接收到的性别可能与作为其变化值发送的年龄值有关。 我在打印后用调试器检查了值,它们是相同的,所以它不是打印问题。

【问题讨论】:

  • 您没有提到任何一方所涉及的 Java 流的类型。因此,我们无法就您的代码不工作的原因或使用正确的方法提供建议。

标签: java sockets integer inputstream outputstream


【解决方案1】:

使用简单的 .write() 和 .read() 解决了我的问题。

【讨论】:

  • 但是为什么呢?对不起,但是一个简单地给出修复而不解释它的答案对其他读者没有多大帮助。您的原始版本不起作用是有原因的,人们需要了解那是什么……这样他们才能决定您的假定修复是否对他们正确。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 2014-09-02
  • 2012-12-18
  • 1970-01-01
相关资源
最近更新 更多