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

Python、/C/C++ Socket编程实例 Socket: socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。  在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的 阅读详情

近几天看到csdn上问c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。

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

原问题见:http://community.youkuaiyun.com/Expert/topic/3886/3886989.xml?temp=.3527033

这类问题通常是为了利用原有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

---------------------------------------------------------------------------

当然,也可以利用writeInt,writeFloat方法发送,但字节顺序需要改为低在前。
这个问题稍后在讨论。


如有任何问题,请指正!

kingfish
2005.3.29

Field _II 仿真 学习笔记 参考Field II的使用说明,进行了四个例子的练习。仿真程序和结果如下: PURPOSE1:Calculate the received response from all elements of a linear array and plot the responses and the summed response 【计算来自所有线性阵元的接收响应,并绘制该响应以及叠加响应。】 >> 阅读详情

相关推荐

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4281

java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

weixin_45866907的博客 354

MATLAB新手必看:5分钟搞定直流无刷电机Simulink仿真(附完整模型下载)

本文为MATLAB新手提供直流无刷电机Simulink仿真的快速入门指南,涵盖从环境配置到速度控制闭环实现的完整流程。通过详细的模块选择和参数设置说明,帮助读者5分钟内搭建基础仿真模型,并附赠完整模型下载,助力快速掌握电机控制仿真技术。

efc123456的博客 984

Java(Android)与C++之间的Socket通信

Java与C++之间的Socket通信,对于小的数据量和控制命令,直接可以封装成json或xml格式,进行传输。但对于文件等大数据量传输,必须要将文件封装成帧,每一帧都设定固定大小的缓冲区,逐帧传输。此时json和xml便不再适用了。 在此过程中要需解决如下问题: 1.    Java和C++数据基本类型不同,不仅所占字节数不同(如long型,java占8bytes,C++一般为4bytes)

张坤xfiction的专栏 8617

常见的电容有哪些

电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。

qq_40170041的博客 768

PyFluent进阶实战:自动化密闭几何(Watertight)网格生成

本文深入探讨了如何利用PyFluent实现自动化密闭几何(Watertight)网格生成。通过Python脚本控制Fluent Meshing工作流,工程师可以高效、一致地完成从几何导入、局部尺寸定义、面网格生成到边界层设置和体网格输出的全过程,从而将复杂的CFD前处理工作转化为可重复、可集成的自动化流程,极大提升仿真效率和知识复用性。

t8u9v0w1x的博客 579

java与C++之间进行SOCKET通讯要点简要解析

<br /> <br />java与C++之间进行SOCKET通讯要点简要解析<br />hslinux<br />0、篇外语<br />  此乃本人学习过程中自娱自乐之作,为了遗忘后有个地方再温习。如入您法眼,转载请尊重原作者,请说明出处。<br /><br /><br /><br />1、big-endian与little-endian<br />   Endian定义:在计算机系统体系结构中用来描述在多字节数中各个字节的存储顺序。<br />big-endian也称高位在前、大端在前。是计算机体系结构

hslinux的专栏 7740

【100%通过率】华为od统一考试B卷【查找接口成功率最优时间段】Python 实现

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数, 给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。

MISAYAONE的博客 5871

C++与Java Socket通信使用Protobuf

Protobuf: Protobuf-3.6.1,内容是CMake、vs2017编译后的使用protobuf所需要的lib与protoc.exe,有Debug和Release版本,可以直接使用不用编译了。也包含需要到的头文件 我把要用的东西都放在gitee里le ,e自取ziqu ...

DAMN WHERE'D YOU FIND THAT 2960

荒岛逃生游戏

正负表示逃生方向(正表示向右逃生,负表示向左逃生),绝对值表示战斗力,越左边的数字表示里左边港口越近,逃生方向相同的人永远不会发生决斗。- 如果左逃生者的战斗力大于右逃生者,则左逃生者获胜,减少其战斗力,并将右逃生者出栈。- 处理完所有输入后,统计仍在右逃生者栈和左逃生者栈中的战斗力,即可得到成功逃生的人数。- 如果左逃生者的战斗力小于右逃生者,则右逃生者获胜,减少其战斗力,左逃生者出局。- 向左逃生:从右逃生者栈中取出元素,与当前逃生者进行决斗。- 继续进行决斗,直到没有右逃生者或左逃生者的战斗力用尽。

面试高手的博客 2102

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1054

java与c/c++进行socket通信的一些问题

 文章来源:http://blog.youkuaiyun.com/kingfish/archive/2005/03/29/333635.aspx 近几天看到csdn上问c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。特地根据网友的一个问题举个例子,希望对初学者有所帮助。原问题见:http://community.youkuaiyun.com/Expert/topic/3886/

冯立彬的博客 9255

【AIZ智能体】Codex 全能AI助手从部署到使用实战操作详解

Codex 全能AI助手从部署到使用实战操作详解

congge 2986

java与c/c++进行socket通信的一些问题(1)-JSP教程,Java技巧及代码

转载:http://www.z6688.com/info/37437-1.htm 近几天看到csdn上问c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。  特地根据网友的一个问题举个例子,希望对初学者有所帮助。  原问题见:http://community.youkuaiyun.com/expert/topic/3886/3886989.xml?temp=.352

NiluChen的专栏 1306

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java字节序 java整型数与网络字节序 byte 数组转换关系 ByteArrayOutputStream用法

Java字节序 java整型数与网络字节序 byte 数组转换关系 ByteArrayOutputStream用法

ffghggf的博客 2193

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java下的socket通信与C/C++下的socket通信

JAVA下的socket通信: 关键点: 由Socket对象得到输入流(即由另一方发过来的数据),此时构造BufferedReader对象 由Socket对象得到输出流(即发往另一方的数据),此时构造PrintWriter对象 客户端: public class Client { public static void main(String[] args) throws

成年老猿的专栏 805

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java与c/c++进行socket通信

比如Server端只接收一个结构Employee,定义如下: struct UserInfo {   char UserName[20];   int UserId; }; struct Employee {   UserInfo user;   float salary; }; 当然也可以定义为 struct Employee {   char name[20];

yinxianluo的专栏 3071

Java与C之间的socket通信

最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App。Android与服务器通信通常采用HTTP通信方式和Socket通信方式。由于对web服务器编程了解较少,而且后台服务器已经采用原始socket实现与c客户端通信,这就要求Android客户端也采用socket实现。所以在开发Android app时采用了原始socket进行编程。 由于算法是用C语言

姚光超的专栏 4万+

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

第一部分请见http://blog.youkuaiyun.com/kingfish/archive/2005/03/29/333635.aspx本部分提出另外一种做法, 供参考。import java.net.*;import java.io.*;/** * 与C语言通信(java做Client,c/c++做Server,传送一个结构) * @author kingfish * @version 1.0 */

kingfish的专栏 4249

java c socket通信 中文乱码解决

前言(扯淡) 作为一个一直从事Java的人来说,突然做C++很多地方都是乱撞墙,就发送的这个乱码就让人感到十分头秃,昨天跟老板对话,老板说不行咱就花钱找别人做。。。能力别质疑的感觉真是让人糟心啊- - 不扯太多,程序员节快乐,大家一起头秃吧。。虽然我并不想秃。 问题 言归正传,c++接收信息是gb2312,Java发数据是UTF-8,我Java接收数据没有问题,但是发给C++就遇到乱码问题...

shenshaoming的博客 2万+

C/C++ 给 Java 通过Socket传输int问题

C/C++ 给 Java 通过Socket传输int问题引言int高低位乱序解决 引言 事情是这样的,朋友有个软件,但是是单机版本,他想实时向服务器传输生成出来的报告,算是服务器那边有个备份。 我先看了一下,软件是C/C++的,CRT也是版本齐全,而且那台电脑也不允许装什么其他环境了,我很自然的就用C/C++写了,而服务端使用JAVA写的,因为服务器那边本来就装了JAVA环境,但没有10以上版本的CRT,所以我就用了2个不同语言写了。 int高低位乱序 如果两边同时使用c/c++写,那么不会出现这个问题,因

Doub1's Blog 1311
上一篇: 通过reflect中得到数组类型
下一篇: java与c/c++进行socket通信的一些问题(2)
kingfish
博客等级 码龄26年 237粉丝 17原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值