[java网络通信]如何发送一个结构体
java做客户端与C服务器进行网络通信;需要发送一个结构体
struct aaa
{
byte a1;
short a2;
int a3;
};
如何变成对端可接收的码流?
请各位大侠指点下,小弟先谢谢啦 网络 Java 通信 --------------------编程问答-------------------- 发送字节码吧,c端自己截取 --------------------编程问答-------------------- 记得强制转换也行,就是要注意大小端的问题 --------------------编程问答--------------------
字节码是什么东东,刚接触java,再指点下?
有没有可参考的例子,多谢啦
--------------------编程问答--------------------
大小端我知道,据说java主机序和网络序都是大端,到底是不是这样啊?
到底该咋整,真没辙了
有没有做过这方面通信的大侠,求救了!! --------------------编程问答-------------------- 其实很简单的,
你就把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楼说的靠谱一点吧,定义一个序列化的对象
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