在C写的socket服务端定义下面的信息
unsigned long len;
unsigned char code;
char cmd[10];
long num;
在JAVA写的客户端怎么通过流把值传递给服务器,例如以下的数据
len = 30
code = 166
cmd = 10055
num = 1

解决方案 »

  1.   

    需要在JAVA中将参数值转成与C定义的一样
      

  2.   

    全部转换成byte,在java和c中进行转换
    直接读char什么的可能有麻烦,占的字节数不同
      

  3.   

    你把它按八进制输出一下:Integer.toOctalString(i)
      

  4.   

    貌似Java和C之间传数据,要注意高低位的。
    //楼主试一下这个代码,如果可行就OK,不行,要换高低位滴。
    /*
      long len = 30 
      char code = 166 
      String cmd = 10055 
      long num = 1
    */
    OutputSream out = ... ;
    DataOutputStream dos = new DataOutputStream(out);
    dos.writeLong(len);
    dos.writeByte((byte)code);
    byte [] buff = new byte[10];
    System.arrayCopy(cmd.getBytes(),0,buff,0,buff.length);
    dos.write(buff,0,buff.length);
    dos.writeLong(num);
      

  5.   

    無論是Java 還是 C 在底層相同協議上的傳輸的數據格式都是一樣的。
    與內容的所定義的數據沒什麼關係。
    它總是一個byte 一個byte 的連接起來,傳送至另一個互聯終端。在C写的socket服务端定义下面的信息
    unsigned long len;
    unsigned char code;
    char cmd[10];
    long num; 既然服務端的數據內容會照如上格式去解析。那麼,你要清楚,各數據的順序及解析規則,比如:
    內容數據的,第1 ~ 8 byte 是參數len, 9 ~ 10 byte 是code 知道了這些,那麼在另一端就很好組織數據了。按照這種規則組成一個 byte Array 扔過去就OK了
      

  6.   

    java的数据长度是相对固定的
    c的随机器而定了
      

  7.   

    没有必要按C的原代码一句句对应,只要功能相同就可以了.
    如果一句句对应,就像你贴子中所指出的,指针这个东西,java中没有,用引用是不能替代指针的。
    指针可以加减一个整数指向其它的数据,引用不行。
    数据的格式也一样,你给的格式在另外的环境下可能还要有变化。关键是你要知道数据格式是什么,然后做相应的操作。所以自己也可以按自己的数据格式来完成功能。
      

  8.   

    高低位互換啊,用位運算符啊:
    比如:32位的int x
    int a = x >> 16; // 取高位向低位移動,高位補0
    int b = x << 16 ; // 取低位向高位移動,低位補0
    x = a|b;  // 高低位重新組合
      

  9.   

    没人能提供可参考的代码吗?
    包括将INT型转成C的CHAR类型所能识别的代码
      

  10.   

    建议楼主学习下CORBA,然后再做多语言的混合的开发,否则需要自己做的东西太多啦。
      

  11.   

    全部转成byte[]然后一块发送过去,下面是把一个long型数据转成byte[]例子public static byte[] long2byte(long n) {
        byte b[] = new byte[8];
        b[0] = (byte) (int) (n >> 56);
        b[1] = (byte) (int) (n >> 48);
        b[2] = (byte) (int) (n >> 40);
        b[3] = (byte) (int) (n >> 32);
        b[4] = (byte) (int) (n >> 24);
        b[5] = (byte) (int) (n >> 16);
        b[6] = (byte) (int) (n >> 8);
        b[7] = (byte) (int) n;
        return b;
      }网上有很多这样的代码,你参考一下就行了
      

  12.   

    但有一个问题不明白,在C里面定义char code = 166,code本身就只有一个字节,但166是整形,一个字节放不下。怎么转?
      

  13.   

    C语言里面可以使用 uchar类型或者unsigned char类型来定义code变量,
    这样,可以表示0~255之间的整数。
    对于166这个整数,一个字节还是能够放下滴,只是,你把它当成无符号的整数就可以了。
    在Java里面,byte、int、short都是有符号的整数,所以,如果116这个数据要参与算术运算的话,
    就不能选择byte类型。否则,它会被当做负数进行运算。