java - 如何使用Sockets TCP在java和android之间正确传递对象?

标签 java android sockets tcp

我正在尝试使用 Android 应用程序和 Java 应用程序使用 TCP/IP 发送对象。 但我遇到的问题是传入的信息为空。

该对象属于一个名为 Mensaje 的类,并且在两个项目中具有相同的包名称并具有相同的serialVersionUID:

package CLASSESS;

import java.io.Serializable;


public class Mensaje implements Serializable{
   // private static final long serialVersionUID = 5950169519310163575L;
   private static final long serialVersionUID = 9178463713495656548L;
    public static int TYPE;
    public static int ID;
    public static String DATA;
}

Android 应用程序类实现 Serialized 并处理威胁

public class SocketClient implements Serializable{



private Runnable send_ObjectMessage = new Runnable(){
        public void run(){

            try {
                obj_Mensaje = new Mensaje();
                obj_Mensaje.TYPE = 1;
                obj_Mensaje.ID = 2;
                obj_Mensaje.DATA= "hOKA MUNDO";
                salida_mensaje = new ObjectOutputStream(socket_cliente.getOutputStream());
                salida_mensaje.writeObject(obj_Mensaje);
                salida_mensaje.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    };
}

服务器具有相同的 Mensaje 类,并使用相同的serialVersionUID 实现可序列化;

服务器读取威胁上的对象。

@Override
public void run() {
    try {
        obj_message_read = new Mensaje();
        ois_readMessage = new ObjectInputStream(clientSocket.getInputStream());
        while(clientSocket.isConnected()){
            Object aux = ois_readMessage.readObject();
            if(aux instanceof Mensaje){
                obj_message_read = (Mensaje)aux;
                setDATA(obj_message_read.DATA);
                setTYPE(obj_message_read.TYPE);
                setID(obj_message_read.ID);
                System.out.println("Data" + obj_message_read.DATA);

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

}

问题在于 Mensaje 中的信息为空。 所以当我打印 System.out.println("Data"+ obj_message_read.DATA); 服务器打印

Data Null

最佳答案

我认为问题在于您尝试发送的字段被声明为static,这对于序列化来说是 transient 的。

更改它并删除该关键字:

public class Mensaje implements Serializable{
   // private static final long serialVersionUID = 5950169519310163575L;
   private static final long serialVersionUID = 9178463713495656548L;
    public int TYPE;
    public int ID;
    public String DATA;
}

关于java - 如何使用Sockets TCP在java和android之间正确传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215691/

相关文章:

java - Android 最高效的列表容器

sockets - 循环中匹配臂中的变量来自哪里?

c - 跟踪客户端-服务器事务 - c 中的套接字

java - 如何在 JavaFX 中将 (0,0) 处的水平线和垂直线颜色加深

java - 如何使用 hadoop 按列读取 CSV 文件?

android - 如何使用新的 list 合并(Android Studio 和 Gradle)?

python - 混淆行为与 pygeocoder 和 Google App Engine with Sockets

Java:调用父类(super class)的构造函数,该构造函数调用设置子类字段的重写方法

java - 有没有一种干净的方法来声明每个元素具有相同值的 Java 数组?

android - 如何使线程串联工作