[java网络通信]如何发送一个结构体 java做客户端与C服务器进行网络通信;需要发送一个结构体struct aaa{ byte a1; short a2; int a3;};如何变成对端可接收的码流?请各位大侠指点下,小弟先谢谢啦网络Java通信 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 字节码是什么东东,刚接触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中序列化如何实现),就明白如何传送网络数据! 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中对象序列化之后网络发出去之后,另一端把字节流解析出来。 JPanel如何被鼠标拖动改变大小? 关于工具栏摆放位置的问题,望高手解答! 新手请教:为什么我编译有的.java程序时报错找不到类? 这题就这么难解决吗? runtime的路径问题 JFilechooser用做文件保存的问题?急急急!!! 关于公式解析器的问题,求教 TextField 和 JTextField有什么区别吗 怎么按指定格式输入数据 有请[路人甲]:关于你给的那个smpp,介绍一下你的经验? 在java中怎么用代码实现按了某个按键 浏览器能访问的图片,java程序不能访问,怎么回事儿?
有没有可参考的例子,多谢啦
大小端我知道,据说java主机序和网络序都是大端,到底是不是这样啊?
到底该咋整,真没辙了有没有做过这方面通信的大侠,求救了!!
你就把java端的数据放到一个byte数组中去,
然后发送到c端,
c端直接强制转换就行
多谢aotian16 我之前计划也是这样的,但是好像java在底层没有c给力,有没有可参考的例子;另外,还要传递不定长度的字符串;考虑在c侧的解析,都比较麻烦;
实在不行就直接全转成字符串的 ...
看14楼,这是一个UDP的例子,不过编码过程就是这样。大小端问题可以通过ByteBuffer.order(ByteOrder.LITTLE_ENDIAN)来转换成小端(默认大端)
不定长度的字符串是必须在它前面加一个int来说明长度的了
class aaa implements Serializable {
//some attrs
}在网络通信的时候
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(new aaa());在C语言里面尝试从输入里面读二进制数据,按对象定义时第个属性占多大空间,应该有办法恢复出来。如果楼主想读完之后用强制转换之类的方法就能成功,个人觉得可能性比较小。BTW:可以看看google的protocal buffer实现,有C++和JAVA的转换工具,基本的思想就是在java中对象序列化之后网络发出去之后,另一端把字节流解析出来。