• 大小: 1.14MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-29
  • 语言: Java
  • 标签: java  c++  socket通信  

资源简介

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 < valArr.length && index < maxLen) {
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] << left);
}
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


评论

共有 条评论