日期:2014-05-20  浏览次数:20690 次

问个Socket发送字节问题
我现在做一个温控接收仪的东西,用TCP连接,但是那边需要发送一个口令:68770000df0 这样的,用16进制发送出去,字节方式,
我现在纠结中,问一下怎么发送16进制的字节,我试过很多方法都不行

------解决方案--------------------
是指十六进制的字符串么?那么就是:
String str = "68770000df0";
byte[] message = str.getBytes();
写就随意了,write(byte);


如果是要将该十六进制转为数值来发送,那么就是:
String str = "68770000df0";
long data = Long.parseLong(str, 16);
写的时候注意用ObjectOutputStream.writeLong(data);


需要提醒你的是,一般这种都会有结束符,否则对方无法判定你这个口令字符串多长才结束,你需要了解下这个问题。

------解决方案--------------------
你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪

发送16进制字节指令:
从连接里得到输出流,然后 out.write(0x06);
out.write(0x87);
out.write(0x70);
out.write(0x00);
out.write(0x0d);
out.write(0xf0);

估计就差不多了
------解决方案--------------------
话说...68770000df0 <- 这个东西是String还是一个字节数组...你也不说清楚...
字符串的话
String str = 68770000df0;
OutputStream os = somewhere.getOutputStream(); // 获取你的输出流
os.write(str.getBytes());
os.flush();

字节数组就直接发送就行了
byte[] buf = {0x06,0x08,0x07,0x07,0x00,0x00,0x00,0x00,0x0d,0x0f,0x00 };
OutputStream os = somewhere.getOutputStream(); // 获取你的输出流
os.write(buf);
os.flush();

AND:流操作都是直接操作字节的,不知道你说的试了很多方法都不能操作字节是肿么回事...
AND..16进制,10进制,2进制只是为了让我们方便"观看"字节的值而已,字节就是字节...