社区
Java SE
帖子详情
问个Socket发送字节问题
hellokino
2012-06-04 05:45:30
我现在做一个温控接收仪的东西,用TCP连接,但是那边需要发送一个口令:68770000df0 这样的,用16进制发送出去,字节方式,
我现在纠结中,问一下怎么发送16进制的字节,我试过很多方法都不行
...全文
214
7
打赏
收藏
问个Socket发送字节问题
我现在做一个温控接收仪的东西,用TCP连接,但是那边需要发送一个口令:68770000df0 这样的,用16进制发送出去,字节方式, 我现在纠结中,问一下怎么发送16进制的字节,我试过很多方法都不行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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);
需要提醒你的是,一般这种都会有结束符,否则对方无法判定你这个口令字符串多长才结束,你需要了解下这个问题。
C++ 百万并发网络通信引擎架构与实现 (
Socket
、全栈、跨平台) Version 1.0
本课程由刘远东、张立铜两位工程师将两人在企业多年积累的开发经验结合而成。从基础的网络知识开始由浅入深地讲解如何使用C++实现一套支持百万级别并发的网络通信引擎。包含:高频并发、多线程、多进程、线程池、...
java
socket
字节
数组_通过java
socket
发送
一个大
字节
数组
我有一个长度超过1200000的大
字节
数组 . 我想通过DataOutputStream
发送
它,并通过DataInputStream在客户端接收 .我正在使用代码out.write(outData)in.readFully(inData)out是DataOutputStream,在DataInputStream中...
socket
传送
字节
流
所以,用
字节
流进行
socket
的传输..例子如下: 客户端: //获得流 byteOut = new ByteArrayOutputStream(); out = new DataOutputStream(byteOut); //转为
字节
流 byte[] messes=message.getBytes("GBK"); //...
java
socket
传送
字节
流(前后台)
所以,用
字节
流进行
socket
的传输..例子如下: 客户端: //获得流 byteOut = new ByteArrayOutputStream(); out = new DataOutputStream(byteOut); //转为
字节
流 byte[] messes=message.getBytes("GBK")...
Socket
网络
字节
序—简单易懂
发送
主机通常将
发送
缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的
字节
依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章