|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.c++|成绩近几天看到csdn上问c/c++和java通讯的成绩对照多,出格是c独有的数据布局(如struct)。
专程依据网友的一个成绩举个例子,但愿对初学者有所匡助。
原成绩见:http://community.csdn.net/Expert/topic/3886/3886989.xml?temp=.3527033
这类成绩一般是为了使用原有Server大概Server不克不及做修正(一般是c/c++)形成。
好比Server端只吸收一个布局Employee,界说以下:
structUserInfo{
charUserName[20];
intUserId;
};
structEmployee{
UserInfouser;
floatsalary;
};
固然也能够界说为
structEmployee{
charname[20];
intid;
floatsalary;
};
javaclient测试源码(为申明成绩,假定struct字节对齐,sizeof(Employee)=28)
importjava.net.*;
/**
*与C言语通讯(java做Client,c/c++做Server,传送一个布局)
*@authorkingfish
*@version1.0
*/
classEmployee{
privatebyte[]buf=newbyte[28];//为申明成绩,定逝世巨细,事务中能够天真处置
/**
*将int转为低字节在前,高字节在后的byte数组
*/
privatestaticbyte[]toLH(intn){
byte[]b=newbyte[4];
b[0]=(byte)(n&0xff);
b[1]=(byte)(n>>8&0xff);
b[2]=(byte)(n>>16&0xff);
b[3]=(byte)(n>>24&0xff);
returnb;
}
/**
*将float转为低字节在前,高字节在后的byte数组
*/
privatestaticbyte[]toLH(floatf){
returntoLH(Float.floatToRawIntBits(f));
}
/**
*机关并转换
*/
publicEmployee(Stringname,intid,floatsalary){
byte[]temp=name.getBytes();
System.arraycopy(temp,0,buf,0,temp.length);
temp=toLH(id);
System.arraycopy(temp,0,buf,20,temp.length);
temp=toLH(salary);
System.arraycopy(temp,0,buf,24,temp.length);
}
/**
*前往要发送的数组
*/
publicbyte[]getBuf(){
returnbuf;
}
/**
*发送测试
*/
publicstaticvoidmain(String[]args){
try{
Socketsock=newSocket("127.0.0.1",8888);
sock.getOutputStream().write(newEmployee("kingfish",123456789,8888.99f).
getBuf());
sock.close();
}
catch(Exceptione){
e.printStackTrace();
}
}//end
---------------------------------------------------------------------------
固然,也能够使用writeInt,writeFloat办法发送,但字节按次必要改成低在前。
这个成绩稍后在会商。
若有任何成绩,请斧正!
他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。 |
|