我想通过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结果。
任何人都可以建议我或告诉我我的错误吗?
答案 0 :(得分:1)
你正在努力做到这一点。完全摆脱ByteBuffer
并使用DataOutputStream
的所有方法。他们都是大端的。我无法看到任何错误,但显然你必须发送一些同行并不理解的内容,以便他关闭连接而不是发送回复。
注意:Socket.isConnected()
在您测试它时不可能是假的。