簡體   English   中英

使用可序列化對象的Java套接字與android之間的通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM