通过套接字读取和写入字节数据包

时间:2014-05-05 07:30:15

标签: java android sockets

我想通过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结果

任何人都可以建议我或告诉我我的错误吗?

1 个答案:

答案 0 :(得分:1)

你正在努力做到这一点。完全摆脱ByteBuffer并使用DataOutputStream的所有方法。他们都是大端的。我无法看到任何错误,但显然你必须发送一些同行并不理解的内容,以便他关闭连接而不是发送回复。

注意:Socket.isConnected()在您测试它时不可能是假的。