我想通过 Socket 将 Android 设备连接到外部设备。 Socket 连接外部设备成功。
现在,如果外部设备需要任何数据,则按照以下顺序将字节数据包数据的请求发送到套接字。如果外部设备接收数据正确,则发送字节数据作为响应。
参数:方法名(1 个字节)、有效负载长度(2 个字节)、有效负载(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
。它们都是大端字节序。我看不到任何错误,但显然您必须发送对等方不理解的内容,因此他正在关闭连接而不是发送回复。
Note: Socket.isConnected()
在您测试它时不可能是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)