c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。

特地根据网友的一个问题举个例子,希望对初学者有所帮助。

这类问题通常是为了利用原有Server或者Server不能做修改(通常是c/c++)造成。

比如Server端只接收一个结构Employee,定义如下:

struct UserInfo {
char UserName[20];
int UserId;
};
struct Employee {
UserInfo user;
float salary;
};

当然也可以定义为

struct Employee {
char name[20];
int    id;
float salary;
};

java client 测试源码(为说明问题,假设struct字节对齐,sizeof(Employee)=28)

import java.net.*;
/**
* 与C语言通信(java做Client,c/c++做Server,传送一个结构)
* @author kingfish
* @version 1.0
*/
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;
}
/**
* 将float转为低字节在前,高字节在后的byte数组
*/
private static byte[] toLH(float f) {
return toLH(Float.floatToRawIntBits(f));
}
/**
* 构造并转换
*/
public Employee(String name, int id, float 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 {
Socket sock = new Socket("127.0.0.1", 8888);
sock.getOutputStream().write(new Employee("kingfish", 123456789, 8888.99f).
getBuf());
sock.close();
}
catch (Exception e) {
e.printStackTrace();
}
} //end

java与c/c++进行socket通信的一些问题相关推荐

  1. java面试题44关于 Socket 通信编程,以下描述正确的是:( )

    java面试题44关于 Socket 通信编程,以下描述正确的是:( ) A 客户端通过new ServerSocket()创建TCP连接对象 B 客户端通过TCP连接对象调用accept()方法创建 ...

  2. java与C语言之间socket通信(java客户端 C服务端)

    直接贴代码 服务端C代码 server.c #include <stdio.h> #include <sys/types.h> #include <sys/socket. ...

  3. java事件 socket_java中有关socket通信的学习笔记

    最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...

  4. java客户端服务器代码_Java Socket通信 客户端服务器端基本代码

    [服务器端] import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import ...

  5. java与c/c++进行socket通信的一些问题(2)

    import java.net.*; import java.io.*; /** * 与C语言通信(java做Client,c/c++做Server,传送一个结构) * @author kingfis ...

  6. java与c 通信_Java与C之间的socket通信

    最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App.Android与服务器通信通常采用HTTP通信方式和Socket通信方式.由于对web服务器编程了解较少 ...

  7. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...

  8. Java Socket实战之六 使用NIO包实现Socket通信

    2019独角兽企业重金招聘Python工程师标准>>> 本文地址:http://blog.csdn.net/kongxx/article/details/7288896 Java S ...

  9. flex java socket通信

    引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...

最新文章

  1. go 获取cpu核数
  2. 原生javascript实现完整的轮播图
  3. leetcode面试题 17.08. 马戏团人塔(二分法)
  4. url中传递url参数|url中特殊字符、?、=无法解析问题
  5. 基于Python+Django的在线习题考试测试管理系统
  6. 腾讯电脑管家离线安装包_这个良心小工具,让你电脑流畅1倍,干掉流氓软件...
  7. 【报告分享】产业互联网发展趋势及机会分析报告.pptx(附下载链接)
  8. myeclipse 8.6安装freemarker插件
  9. WPS2016专业版
  10. 不用任何插件:小白如何白嫖百度网盘下载速度(不好用来打我,嘿嘿)
  11. 【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
  12. C#图片无损转换为ico格式
  13. 解决 pq: SSL is not enabled on the server
  14. 2020CVPR对抗样本相关论文整理(无开源代码)
  15. Android 保存图片到系统图库并通知相册刷新在部分手机的相册里无法查看的问题
  16. 静态网页制作初步体会
  17. Dialog的高冷用法
  18. 云阶月地,关锁千重(一.公平和非公平)
  19. Java正则表达式——验证手机号码符合性
  20. Haxe的结构体与匿名结构体

热门文章

  1. 从云计算到低延时,传统编码器与创新技术双剑合璧严把成本质量关
  2. MPEG创始人、主席:MEPG商业模式已经破裂
  3. 进程组 会话 作业
  4. 微信AI从识物到通用图像搜索的探索揭秘
  5. 腾讯游戏自研学术成果:基于图分割的网络表征学习初始化技术
  6. go sync.map 源码分析
  7. golang 结构体 slice 排序
  8. linux 命令 nohup 后台运行
  9. leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)
  10. leetcode 496, 503, 556. Next Greater Element I, II, III | 496, 503, 556. 下一个更大元素 I,II,III(单调栈)