資源簡介
java與c++通過socket通信。其中java作為客戶端,c++作為服務器。主要解決了C++中的結構體在java中如何實現和模擬。還有int,float,及字符串的處理。極具代表性。

代碼片段和文件信息
import?java.net.*;
/**
?*?與c語言通信(java做client,c/c++做server,傳送一個結構)
?*?
?*?@author?kingfish
?*?@version?1.0
?*/
public?class?Employee?{
private?byte[]?buf?=?new?byte[28];?//?為說明問題,定死大小,事件中可以靈活處理
/**
?*?將int轉為低字節在前,高字節在后的byte數組
?*/
private?static?byte[]?tolh(int?n)?{
byte[]?b?=?new?byte[4];
b[0]?=?(byte)?(n?&?0xff);
b[1]?=?(byte)?(n?>>?8?&?0xff);
b[2]?=?(byte)?(n?>>?16?&?0xff);
b[3]?=?(byte)?(n?>>?24?&?0xff);
return?b;
}
/**
?*?將byte數組轉化成String
?*/
private?static?String?toStr(byte[]?valArrint?maxLen)?{
int?index?=?0;
while(index? if(valArr[index]?==?0)?{
break;
}
index++;
}
byte[]?temp?=?new?byte[index];
System.arraycopy(valArr?0?temp?0?index);
return?new?String(temp);
}
/**
?*?將低字節在前轉為int,高字節在后的byte數組
?*/
private?static?int?vtolh(byte[]?bArr)?{
int?n?=?0;
for(int?i=0;i int?left?=?i*8;
n+=?(bArr[i]?< }
return?n;
}
public?String?name?=?““;
public?int?id?=?0;
public?float?salary?=?0;
/**
?*?將float轉為低字節在前,高字節在后的byte數組
?*/
private?static?byte[]?tolh(float?f)?{
return?tolh(Float.floatToRawIntBits(f));
}
private?static?Employee?getEmployee(byte[]?bArr)?{
String?name?=?““;
int?id?=?0;
float?salary?=?0;
byte[]?temp?=?new?byte[20];
name?=?toStr(bArr20);
System.arraycopy(bArr?20?temp?0?4);
id?=?vtolh(temp);
return?new?Employee(name?id?salary);
}
/**
?*?構造并轉換
?*/
public?Employee(String?name?int?id?float?salary)?{
this.name?=?name;
this.id?=?id;
this.salary?=?salary;
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);
}
/**
?*?返回要發送的數組
?*/
public?byte[]?getbuf()?{
return?buf;
}
/**
?*?發送測試
?*/
public?static?void?main(String[]?args)?{
try?{
int?index?=?0;
byte[]?receive?=?new?byte[28];
int?k=15;
while(k>0){
Socket?sock?=?new?Socket(“127.0.0.1“?5050);
System.out.println(“send?content:??name=kingfish??“+“value=“+(1+index));
sock.getOutputStream().write(new?Employee(“kingfish“+index?1+index++?10.99f?+?index).getbuf());
sock.getInputStream().read(receive);
Employee?ee?=?getEmployee(receive);
System.out.println(“????response:??name=“+ee.name+“??“+“value=“+ee.id);
k--;
sock.close();
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}?//?end?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2572??2012-09-25?11:14??java與c++通過socket通信\Employee.class
?????文件???????2749??2012-09-25?11:11??java與c++通過socket通信\Employee.java
?????文件?????188477??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\Server.exe
?????文件?????198420??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\Server.ilk
????I.A....???3637416??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\Server.pch
?????文件?????451584??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\Server.pdb
?????文件??????14297??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\source.obj
?????文件?????140288??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\vc60.idb
?????文件??????77824??2012-09-25?11:16??java與c++通過socket通信\Server\Debug\vc60.pdb
?????文件???????4284??2012-09-25?10:35??java與c++通過socket通信\Server\Server.dsp
?????文件????????518??2012-09-25?10:35??java與c++通過socket通信\Server\Server.dsw
?????文件??????41984??2012-09-25?11:16??java與c++通過socket通信\Server\Server.ncb
?????文件??????48640??2012-09-25?11:16??java與c++通過socket通信\Server\Server.opt
?????文件???????1264??2012-09-25?11:16??java與c++通過socket通信\Server\Server.plg
?????文件???????1814??2012-09-25?11:16??java與c++通過socket通信\Server\source.cpp
?????目錄??????????0??2012-09-25?11:16??java與c++通過socket通信\Server\Debug
?????目錄??????????0??2012-09-25?11:16??java與c++通過socket通信\Server
?????目錄??????????0??2012-09-25?11:47??java與c++通過socket通信
-----------?---------??----------?-----??----
??????????????4812131????????????????????18
- 上一篇:android簡單計算器代碼
- 下一篇:hibernate4 必須jar 包
評論
共有 條評論