java做客户端与C服务器进行网络通信;
需要发送一个结构体
struct aaa
{
   byte   a1;
   short  a2;
   int    a3;
};如何变成对端可接收的码流?
请各位大侠指点下,小弟先谢谢啦网络Java通信

解决方案 »

  1.   

    字节码是什么东东,刚接触java,再指点下?
    有没有可参考的例子,多谢啦
      

  2.   


    大小端我知道,据说java主机序和网络序都是大端,到底是不是这样啊? 
    到底该咋整,真没辙了有没有做过这方面通信的大侠,求救了!!
      

  3.   

    其实很简单的,
    你就把java端的数据放到一个byte数组中去,
    然后发送到c端,
    c端直接强制转换就行
      

  4.   


    多谢aotian16 我之前计划也是这样的,但是好像java在底层没有c给力,有没有可参考的例子;另外,还要传递不定长度的字符串;考虑在c侧的解析,都比较麻烦;
    实在不行就直接全转成字符串的 ...
      

  5.   

    http://bbs.csdn.net/topics/390445579#post-394384766
    看14楼,这是一个UDP的例子,不过编码过程就是这样。大小端问题可以通过ByteBuffer.order(ByteOrder.LITTLE_ENDIAN)来转换成小端(默认大端)
    不定长度的字符串是必须在它前面加一个int来说明长度的了
      

  6.   

    你看一下序列化(或者jdk中序列化如何实现),就明白如何传送网络数据!
      

  7.   

    java没结构体类型。你可以把这个结构体封成json或是xml然后在c端解析再封装成struct类型。
      

  8.   

    jni完成要不然就自己写个算法,来将java对象转换成与c兼容的字节格式。
      

  9.   

    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中对象序列化之后网络发出去之后,另一端把字节流解析出来。