0

我现在的情况很复杂,我有一个运行带有网络线程的服务的 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 数据包在两边是相同的。

谢谢。

4

1 回答 1

1

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

于 2013-03-15T23:57:32.933 回答