簡體   English   中英

通過套接字讀取和寫入字節數據包

[英]Read and Write Bytes data packet via socket

我想通過套接字將Android設備連接到外部設備。 套接字成功連接到外部設備。

現在,如果外部設備需要任何數據,則按以下順序將字節數據包數據請求發送到套接字。 如果外部設備正確接收數據,則發送字節數據作為響應。

參數:methodname(1個字節),payloadlength(2個字節),payload(2個字節)。

現在我的密碼是...

         Socket socket = new Socket("local exteranl device ip", 5000);
if(socket.isConnected())    {
         int methodname = 5;
            int payload  = 2151;
            int payloadLength = 2;

            ByteBuffer buffer = ByteBuffer.allocate(3 + payloadLength); // 3 = for method name + length
            buffer.order(ByteOrder.BIG_ENDIAN); // Just to be explicit

            buffer.put((byte) methodname);
            buffer.putShort((short) payloadLength);
            buffer.putShort((short) payload);

            buffer.rewind();
            byte[] result = new byte[buffer.capacity()]; // Could also use result = buffer.array();
            buffer.get(result);

    DataOutputStream classOUTstream = new DataOutputStream(socket.getOutputStream());
    // socket is already connected
             classOUTstream.write(result);
             classOUTstream.flush();

     InputStream stream = socket.getInputStream();
     byte[] data = new byte[100];
     int count = stream.read(data);
}

上面的代碼是Android,我只知道Java的基本概念。 我得到-1結果計數。

有人可以建議我還是告訴我我的錯誤?

您正在艱難地做到這一點。 完全擺脫ByteBuffer並使用DataOutputStream所有方法。 他們都是大端。 我看不到任何錯誤,但很明顯,您肯定是在發送對等方不理解的內容,因此他正在關閉連接而不是發送答復。

注意: Socket.isConnected()在測試時不能為假。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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