【问题标题】:Communication between java socket and android using Serializable objectsjava socket和android之间使用Serializable对象的通信
【发布时间】:2013-03-04 19:00:11
【问题描述】:

我现在的情况很复杂,我有一个 Android 应用程序运行一个带有网络线程的服务。

另一方面,我的笔记本电脑 (win8) 上运行了一个 java 应用程序。 java 应用程序正在侦听 serversocket,等待 android 应用程序与之通信。一旦 android 应用程序创建一个套接字并将其绑定到正确的端口并寻址 java 应用程序中的服务器套接字,接受它并创建一个新套接字。

这个新套接字正在等待来自 Android 应用(客户端)的数据包。 android 应用程序发送一个可序列化的对象。

问题是 java 应用程序从未读取过它,但我用 wireshark 嗅探并且正在接收数据包。

所以我尝试读取一个字节数组,并且工作正常,套接字读取它没有问题。

有人猜测这是怎么回事吗?我认为我的代码很好,这是一个非常基本的东西,我在 android 应用程序之间做了几次,不知道为什么现在不起作用。

服务器(Java 应用)

mServerSocket = new ServerSocket(port);

        mReceivedSocket = new Socket();

        mReceivedSocket = mServerSocket.accept();

        System.out.println("Accepted");

        mInput = new ObjectInputStream(mReceivedSocket.getInputStream());

        mOutput = new ObjectOutputStream(mReceivedSocket.getOutputStream());

        byte[] buf = new byte[4096];

        while (mReceivedSocket.isConnected()) {

            System.out.println("Waiting for packets");

            mInput.read(buf, 0, 4096);

            //NotificationPacket packet = (NotificationPacket) mInput.readObject();

            System.out.println("Packet received: "+buf.toString());

            //renderPacket(packet);

        }

客户端发送(Android 应用)

mOutput.writeObject(packet);

        mOutput.flush();

Serializable 数据包两边相同。

谢谢。

【问题讨论】:

  • 调用 readObject() 时会发生什么?它是无限期的吗?
  • 是的,我使用了调试器,但它一直呆在那里......不知道为什么,看起来正在等待阅读更多
  • 您不能使用 isConnected() 作为连接健康检查。它不是。捕捉异常。这就是他们的目的。

标签: java android sockets networking serializable


【解决方案1】:

你必须在ObjectInputStream之前构造ObjectOutputStream,在两端,否则你会死锁。您还必须在两端读取对象。您正在写入一个对象,但正在读取一个字节数组。这没有意义。

【讨论】:

  • 是的,我正在读取双方的对象,这段代码是在尝试查看它是否准备好之后我没有注意到的......我会试试你所说的关于订单的......跨度>
  • 我昨天试了一下,顺序很重要……呵呵,谢谢。我不知道这很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2015-12-10
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
相关资源
最近更新 更多