在C写的socket服务端定义下面的信息
unsigned long len;
unsigned char code;
char cmd[10];
long num;
在JAVA写的客户端怎么通过流把值传递给服务器,例如以下的数据
len = 30
code = 166
cmd = 10055
num = 1
unsigned long len;
unsigned char code;
char cmd[10];
long num;
在JAVA写的客户端怎么通过流把值传递给服务器,例如以下的数据
len = 30
code = 166
cmd = 10055
num = 1
直接读char什么的可能有麻烦,占的字节数不同
//楼主试一下这个代码,如果可行就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);
與內容的所定義的數據沒什麼關係。
它總是一個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了
。
c的随机器而定了
如果一句句对应,就像你贴子中所指出的,指针这个东西,java中没有,用引用是不能替代指针的。
指针可以加减一个整数指向其它的数据,引用不行。
数据的格式也一样,你给的格式在另外的环境下可能还要有变化。关键是你要知道数据格式是什么,然后做相应的操作。所以自己也可以按自己的数据格式来完成功能。
比如:32位的int x
int a = x >> 16; // 取高位向低位移動,高位補0
int b = x << 16 ; // 取低位向高位移動,低位補0
x = a|b; // 高低位重新組合
包括将INT型转成C的CHAR类型所能识别的代码
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;
}网上有很多这样的代码,你参考一下就行了
这样,可以表示0~255之间的整数。
对于166这个整数,一个字节还是能够放下滴,只是,你把它当成无符号的整数就可以了。
在Java里面,byte、int、short都是有符号的整数,所以,如果116这个数据要参与算术运算的话,
就不能选择byte类型。否则,它会被当做负数进行运算。