问个Socket发送字节问题

hellokino 2012-06-04 05:45:30
我现在做一个温控接收仪的东西,用TCP连接,但是那边需要发送一个口令:68770000df0 这样的,用16进制发送出去,字节方式,
我现在纠结中,问一下怎么发送16进制的字节,我试过很多方法都不行
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
你不知道ObjectOutputStream在构造时,会往包装流里写入一些标志位的么?
如果不是基于java序列化操作,不要使用ObjectIn/OutputStream
[/Quote]

看了下源码,果然如此,谢谢了。
RDroid 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 2 楼 的回复:
你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪


不会晕菜的,我又没发送Object,只是利用它writeLong()函数将long型数据转为byte数组而已。

不过核心仍然是原始数据究竟是什么内容,16进制整数还是字符串,楼主一直没揭秘。
[/Quote]
你不知道ObjectOutputStream在构造时,会往包装流里写入一些标志位的么?
如果不是基于java序列化操作,不要使用ObjectIn/OutputStream
MiceRice 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪
[/Quote]

不会晕菜的,我又没发送Object,只是利用它writeLong()函数将long型数据转为byte数组而已。

不过核心仍然是原始数据究竟是什么内容,16进制整数还是字符串,楼主一直没揭秘。
hellokino 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪

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

估计就差不多……
[/Quote]
已经解决了,但还是谢谢了
beiouwolf 2012-06-05
  • 打赏
  • 举报
回复
话说...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进制只是为了让我们方便"观看"字节的值而已,字节就是字节...
RDroid 2012-06-04
  • 打赏
  • 举报
回复
你以为对方是java虚拟机么?你用 ObjectOutputStream,那头不晕菜才怪

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

估计就差不多了
MiceRice 2012-06-04
  • 打赏
  • 举报
回复
是指十六进制的字符串么?那么就是:
String str = "68770000df0";
byte[] message = str.getBytes();
写就随意了,write(byte);


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


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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧