繁体   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