![](/img/trans.png)
[英]How to read a datainputstream when using a dataoutputstream to write bytes to socket?
[英]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.