【发布时间】: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