当前位置:编程学习 > JAVA >>

[java网络通信]如何发送一个结构体

java做客户端与C服务器进行网络通信;
需要发送一个结构体
struct aaa
{
   byte   a1;
   short  a2;
   int    a3;
};

如何变成对端可接收的码流?
请各位大侠指点下,小弟先谢谢啦 网络 Java 通信 --------------------编程问答-------------------- 发送字节码吧,c端自己截取 --------------------编程问答-------------------- 记得强制转换也行,就是要注意大小端的问题 --------------------编程问答--------------------
引用 1 楼 aotian16 的回复:
发送字节码吧,c端自己截取

字节码是什么东东,刚接触java,再指点下?
有没有可参考的例子,多谢啦
--------------------编程问答--------------------
引用 2 楼 aotian16 的回复:
记得强制转换也行,就是要注意大小端的问题


大小端我知道,据说java主机序和网络序都是大端,到底是不是这样啊? 
到底该咋整,真没辙了

有没有做过这方面通信的大侠,求救了!! --------------------编程问答-------------------- 其实很简单的,
你就把java端的数据放到一个byte数组中去,
然后发送到c端,
c端直接强制转换就行 --------------------编程问答--------------------
引用 5 楼 aotian16 的回复:
其实很简单的,
你就把java端的数据放到一个byte数组中去,
然后发送到c端,
c端直接强制转换就行


多谢aotian16 我之前计划也是这样的,但是好像java在底层没有c给力,有没有可参考的例子;

另外,还要传递不定长度的字符串;考虑在c侧的解析,都比较麻烦;
实在不行就直接全转成字符串的 ...
--------------------编程问答-------------------- http://bbs.csdn.net/topics/390445579#post-394384766
看14楼,这是一个UDP的例子,不过编码过程就是这样。

大小端问题可以通过ByteBuffer.order(ByteOrder.LITTLE_ENDIAN)来转换成小端(默认大端)
不定长度的字符串是必须在它前面加一个int来说明长度的了 --------------------编程问答-------------------- 你看一下序列化(或者jdk中序列化如何实现),就明白如何传送网络数据! --------------------编程问答-------------------- 弄个json吧 --------------------编程问答-------------------- java没结构体类型。你可以把这个结构体封成json或是xml然后在c端解析再封装成struct类型。 --------------------编程问答-------------------- 搞成报文发送得了,然后那边接收的时候解析下 --------------------编程问答-------------------- jni完成

要不然就自己写个算法,来将java对象转换成与c兼容的字节格式。 --------------------编程问答--------------------
引用 8 楼 xianwangkai 的回复:
你看一下序列化(或者jdk中序列化如何实现),就明白如何传送网络数据!

8楼说的靠谱一点吧,定义一个序列化的对象
class aaa implements Serializable {
  //some attrs
}

在网络通信的时候
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(new  aaa());

在C语言里面尝试从输入里面读二进制数据,按对象定义时第个属性占多大空间,应该有办法恢复出来。如果楼主想读完之后用强制转换之类的方法就能成功,个人觉得可能性比较小。

BTW:可以看看google的protocal buffer实现,有C++和JAVA的转换工具,基本的思想就是在java中对象序列化之后网络发出去之后,另一端把字节流解析出来。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,