我的情况现在非常有线,我有一个Android应用程序运行带有网络线程的服务。
另一方面,我的笔记本电脑上运行的java应用程序(win8)。 java应用程序正在侦听serversocket,等待android app与它通信。一旦android应用程序创建一个套接字并将其绑定到正确的端口并解决Java应用程序中的服务器套接字接受它并创建一个新的套接字。
这个新套接字正在等待来自Android应用程序(客户端)的数据包。 Android应用程序发送一个可序列化的对象。
问题是java应用程序从不读它,但我用wireshark嗅探并且正在接收数据包。
所以我尝试读取一个字节数组,并且运行良好,套接字读取它没有问题。
对此有何猜测?我认为我的代码很好,这是一个非常基本的东西,我在Android应用程序之间做了几次,不知道为什么现在不工作。
服务器(java app)
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数据包相同。
感谢。
答案 0 :(得分:1)
您必须在两端的ObjectInputStream之前构造ObjectOutputStream,否则您可能会遇到死锁。您还必须在两端读取对象。您正在编写一个对象但是读入一个字节数组。这没有意义。