在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
解决方案 »
- SCJP的考题,关于移位的
- 数据库中如何比较datetime类型中的大小
- [求助]tomcat是从哪个版本开始支持内嵌的(embed),要求jdk的最低版本是多少?
- 正则表达式干吗用的
- 关于java实现MP3的播放?
- hadoop问题求助大神们,每次重新打开linux都要格式化namenode
- 请教一下各位大侠,java1.1.4上哪下载
- 往JTextArea中加入文字,没加一次都要换行,如何实现?
- 为何我在JDK甚至Jbuilder3.下的程序运行下常,但在jbuilder6下总出错?
- Applet能作什么,不能作什么,送分了
- 一个编码问题!急!!
- 求教:当xml文件标签重复时,java如何解析xml
直接读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类型。否则,它会被当做负数进行运算。