由于JAVA使用的byte是有符号类型,而C#(包括C++)中的byte是无符号的,因此,在收发byte[]时都要进行转换处理,研究了几小时,发表解决方案如下:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//Send to C#
byte[] a = Int2BytesLH(800);
//模拟Recv from C#
byte[] b = new byte[]{32,3,0,0};
int c = Bytes2Int(BytestoHL(b));
//Send to JAVA
byte[] a1 = Int2Bytes(800);
//模拟Recv from JAVA
byte[] b1 = new byte[]{0,0,3,32};
int c1 = Bytes2Int(b1);
}
/**
* 将一个Int 数据,转换为byte数组.
* JAVA直接使用
* @param intValue Int 数据
* @return byte数组.
*/
public static byte[] Int2Bytes(int intValue) {
byte [] result = new byte[4];
result[0] = (byte) ((intValue & 0xFF000000) >> 24);
result[1] = (byte) ((intValue & 0x00FF0000) >> 16);
result[2] = (byte) ((intValue & 0x0000FF00) >> 8);
result[3] = (byte) ((intValue & 0x000000FF) );
return result;
}
/**
* 将int转为低字节在前,高字节在后的byte数组
* 转为C#需要的的数组顺序
*
*/
private static byte[] Int2BytesLH(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[]转为低字节在前,高字节在后的byte数组
* 从C#收包后转换为JAVA的数组顺序
*/
private static byte[] BytestoHL(byte[] n) {
byte[] b = new byte[4];
b[3] = n[0];
b[2] = n[1];
b[1] = n[2];
b[0] = n[3];
return b;
}
/**
* 将byte数组的数据,转换成Int值.
* JAVA直接使用
* @param byteVal byte数组
* @return Int值.
*/
public static int Bytes2Int(byte[] byteVal) {
int result = 0;
for(int i = 0; i < byteVal.length; i ++) {
int tmpVal = (byteVal[i] << (8 * (3-i)));
switch (i) {
case 0:
tmpVal = tmpVal & 0xFF000000;
break;
case 1:
tmpVal = tmpVal & 0x00FF0000;
break;
case 2:
tmpVal = tmpVal & 0x0000FF00;
break;
case 3:
tmpVal = tmpVal & 0x000000FF;
break;
}
result = result | tmpVal;
}
return result;
}
}
分享到:
相关推荐
由于需求原因,socket通讯采用 ,net 作为服务器端不断监听java做为客户端发送来的信息。.net 服务器端采用线程方式接收多个客户端连接。已经测试通过。
Android应用源码安卓与PC的Socket通信项目C#版+Java版
发那科机器人与上位机 视觉SOCKET通讯,收发数据,套接字通讯,读写寄存器变量,IO信号,系统变量。
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...
PC端一般使用c++或c# socket收发信息,网页端只能使用websocket,手机端是java socket。需要将PC端、手机端和网页端,多端打通同时实现即时通讯,就是需要websocket和socket相互通信。
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
此DLL的苹果版和java版正在努力开发中......交流QQ:365368248;此演示源码下载地址:http://pan.baidu.com/s/1eQw1npw 里面包括了SanNiuSignal.DLL 下面为大家介绍一下 如何使用SanNiuSignal. 1 ) :TCPServer...
大家好,很高兴今天又可以给大家做分享,我将在本文给大家讲解C#的串口编程、网络编程、PLC通讯开发和架构设计,彻底搞定下位机通讯编程。 本文通过C#、欧姆龙PLC、HostLink通讯协议 TCP通讯 ● 串口通讯等要素,并...
Android的轻量级Socket通讯框架OkSocket使用demo。要实现安卓Socket客户端与C#服务端Socket通信,使用安卓类库OkSocket完美实现。使用了Socket长连接,断线重连,持续心跳连接,发送握手通讯等
本例子读写三菱PLC数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作...3)附件C#代码全开源,所有代码公开,不使用第三方组件。
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
Android应用源码安卓与PC的Socket通信项目C#版+Java版.rar Android应用源码安卓与PC的Socket通信项目java版.rar Android系统访问串口设备源码.rar android蓝牙连接打印机.rar samsung android 蓝牙4.0开发工具包和...
OIM是采用 Java平台开发的一套即时通讯聊天系统,献给对即时通讯有兴趣的朋友。服务端实现了TCP Socket和WebSocket。方便接入网页版、安卓、IOS、PC桌面版客户端。OIM已经实现桌面版客户端,可以跨平台Windows、mac...
C# Socket通信源码,服务端和客户端互发消息,可发文件,震动闪屏,亲测可用
点对点通信功能 实现网络点对点通讯程序的关键步骤就是实现信息在网络中的发送和接收。数据接收 使用的是Socket,数据发送使用的是NetworkStream。 1.1利用Socket来接收信息 TcpListener tlListen1 = new Tcp...
欧姆龙TCP/UDP网络通讯例子,通讯的每个节点都有详细说明,还有欧姆龙PLC程序例子,以及中文版通讯功能块。
WebSocket 服务端与客户端 C# 源码,支持微信小程序 WS 协议通信。
支持中文加密解密,我在开发中客户端有java、delphi、QT,服务器端有C#、php、golang,它们之间要socket通讯,就把同一种加密方法用多种语言编写出来,可点我继续下载别的语言版本。
.net开发的服务端,与网页WebSocket之间的数据通讯,实现类似网页上在线聊天室的 功能