Socket网络通讯开发总结之:Java 与 C进行Socket通讯

转载 2013年12月02日 13:03:03

先交待一下业务应用背景:
服务端:移动交费系统:基于C语言的Unix系统
客户端:增值服务系统:基于Java的软件系统
通迅协议:采用TCP/IP协议,使用TCP以异步方式接入
数据传输:基于Socket流的方式,传输的是网络字节序

Java Socket通讯实现方式这里不做过多的描述,网上到处可以搜索到,比较简单,这里要说的是Java 与 C 进行Socket通讯需注意的地方:


1、Java与C的各种数据类型存储的字节数是不同的:

 Java与C的数据类型的比较   
  Type      Java      C   
  short      2-Byte   2-Byte   
  int        4-Byte   4-Byte   
  long       8-Byte   4-Byte   
  float      4-Byte   4-Byte   
  double     8-Byte   8-Byte   
  boolean    1-bit     N/A   
  byte       1-Byte    N/A   
  char       2-Byte    1-Byte 

所以在通讯前,需要进行类型转换,对于C定义的unsign char为一个字节存储,对应Java这边用byte存储;对于C定义的int, long, float对应Java用int存储,具体可以参考以上的表。

2、Socket通讯是按字节传输的(即8个bit位传输),而对于超过一个字节的类型如short 为两个字节,就存在两种传输入方式,一种是高字节在前传输;一种是高字节在后传输。即Little-Endian和Big-Endian。
Little-Endian和Big-Endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式. 
        假设从地址0x00000000开始的一个字中保存有数据0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为: 
       1)little endian:在内存中的存放顺序是0x00000000-0xcd,0x00000001-0xab,0x00000002-0x34,0x00000003-0x12 
       2)big  endian:在内存中的存放顺序是0x00000000-0x12,0x00000001-0x34,0x00000002-0xab,0x00000003-0xcd 
       需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的. 
       简单的说,ittle endian把低字节存放在内存的低位;而big endian将低字节存放在内存的高位. 
       现在主流的CPU,intel系列的是采用的little endian的格式存放数据,而motorola系列的CPU采用的是big endian. 

网络协议都是Big-Endian的,Java编译的都是Big-Endian的,C编译的程序是与机器相关的,具体是否要进行转换是需要沟通的。假设这里需要转换,以下提供short转的换成字节数组的方式:

  
  public static byte[] ShorttoByteArray(short n) {
    byte[] b = new byte[2];
    b[1] = (byte) (n & 0xff);
    b[0] = (byte) (n >> 8 & 0xff);
    return b;
  }

  
  public static byte[] toLH(short n) {
   

Socket网络通讯开发总结之:Java 与 C进行Socket通讯

先交待一下业务应用背景:服务端:移动交费系统:基于C语言的Unix系统客户端:增值服务系统:基于Java的软件系统通迅协议:采用TCP/IP协议,使用TCP以异步方式接入数据传输:基于Socket流的...
  • zcj331
  • zcj331
  • 2014年04月11日 13:26
  • 241

如何基于TCP/IP协议进行MFC Socket网络通讯编程

MFC Socket简单网络通讯编程

Java ServerSocket Socket 网络通讯的那些事

对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求。这会,Socket对于我们来说就非常实用了。下面是本次学习的笔记。主要分异常类型、交互原理、Socket、ServerSock...

C#简单同步socket网络通讯

  • 2017年10月31日 09:50
  • 70KB
  • 下载

基于socket网络通讯的6410服务端

  • 2013年10月09日 22:09
  • 21.35MB
  • 下载

Java网络通讯---Socket通讯

一:Socket通讯过程 二:Socket通讯主要有两个接口    ServerSocket:服务器端的套接字,开启服务器端及获取套接字对象(Socket)        serverSocket....

Android网络通讯——Socket通信

  • 2017年12月08日 19:06
  • 18.27MB
  • 下载

Cocos2d-x基于BSD Socket网络通讯模块

1. 预备知识: 线程,互斥锁,信号量:  //创建一个线程 int pthread_create(pthread_t *restrict tidp, ...
  • zkdemon
  • zkdemon
  • 2013年03月31日 20:45
  • 14736

cocos2d-x 基于BSD Socket网络通讯模块

http://blog.csdn.net/luxiaoyu_sdc/article/details/9301833 2013-07-11 16:31 2479人阅读 评论(0) 收藏 举报 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket网络通讯开发总结之:Java 与 C进行Socket通讯
举报原因:
原因补充:

(最多只允许输入30个字)