[英]Communication between java socket and android using Serializable objects
我現在的處境非常艱難,我有一個運行有網絡線程服務的Android應用程序。
另一方面,我的筆記本電腦(win8)上運行的Java應用程序。 Java應用正在服務器中監聽,等待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();
可序列化的數據包在兩側是相同的。
謝謝。
您必須在兩端的ObjectInputStream之前構造ObjectOutputStream,否則可能會出現死鎖。 您還必須在兩端讀取對象 。 您正在寫入一個對象,但正在讀取一個字節數組。 那沒有道理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.