`
ccj
  • 浏览: 16294 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
uii
文章分类
社区版块
存档分类
最新评论

在JAVA中使用Socket和C#通讯的解决

阅读更多
由于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;
    }

}

分享到:
评论
1 楼 a90120411 2012-06-02  
转换一下字符编码就行了吧?需要做这些操作么?

相关推荐

    C#和java 之间基于Socket的通信

    以上知识点涵盖了Java和C#之间基于Socket通信的基础知识,实际开发中可能还需要结合具体的应用场景进行更深入的设计和优化。在SocketTest.rar、JavaSocketTest.rar文件中,可能包含了示例代码和运行指南,readme.txt...

    socket通讯 .net做为服务器端和java 做为客户端

    在Java端,我们使用`java.net.Socket`和`ServerSocket`类来实现客户端和服务器端的Socket通信。客户端创建Socket实例,指定服务器的IP和端口,然后通过Socket的`getOutputStream()`和`getInputStream()`方法获取数据...

    C#与Android Socket通信

    1. Android应用中,同样需要引用java.net命名空间,使用java.net.Socket类建立客户端。 2. 创建Socket对象,指定服务器的IP地址和端口号。 3. 使用connect方法建立到服务器的连接。 4. 获取输入流和输出流对象,通常...

    安卓Socket与pc端c#服务器的通信完整代码(包含C#服务器与安卓项目工程)

    在安卓应用中,我们需要使用`java.net.Socket`类来创建Socket连接。首先,创建一个Socket对象,指定服务器的IP地址和端口号,然后通过`getOutputStream()`和`getInputStream()`方法获取输入流和输出流,用于发送和...

    C#与Android手机Socket实例(鼠标控制 聊天)

    在Android中,同样可以使用Java的Socket类进行网络通信。需要在AndroidManifest.xml文件中添加Internet权限,然后在代码中创建Socket对象,连接到服务器,收发数据。 4. **C#与Android之间的通信**: 本实例中,...

    flex C# 基于socket 通讯 应用程序源码

    在本示例中,"flex C# 基于socket 通讯 应用程序源码"描述了一个项目,该项目结合了这两种技术,通过Socket通信实现客户端和服务器端的数据交互。 Socket通信是网络编程的基础,它允许两个网络应用程序之间建立连接...

    C#服务器 安卓客户端 socket通讯

    1. **安卓客户端实现**:在安卓应用中,可以使用java.net.Socket类进行Socket通信。由于安卓平台的安全限制,通常需要在运行时获取INTERNET权限。 2. **连接服务器**:客户端通过指定服务器的IP地址和端口号,调用`...

    Android应用源码安卓与PC的Socket通信项目C#版+Java版_串口通讯.zip

    在这个Android应用源码项目中,我们将看到C#和Java两个版本的实现,分别用于PC端和Android端的编程。 首先,我们要理解Socket的基本概念。Socket是应用层与传输层之间的接口,它为程序员提供了低级别的、面向连接的...

    基于HP_Socket框架的socket通讯源码

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...

    C#实现与欧姆龙PLC以太网通讯源码-Fins UDP

    在"EquipInterfaceSln.VS2010"这个项目文件中,通常包含了C#源代码、解决方案文件以及项目设置等,你可以打开这个解决方案,查看并学习其中的代码实现,了解如何组织和实现FINS通信的各个部分。这将是一个很好的起点...

    基于C#的即时通讯客户端源码.zip

    Java、PHP和asp.net是其他常见的Web开发平台,对比这些语言与C#在即时通讯客户端开发中的差异,可以帮助开发者了解每种语言的优势和适用场景。 【压缩包子文件的文件名称】"MF00278-即时通讯客户端源码"可能是项目...

    windows——socket通讯.zip

    这个“windows——socket通讯.zip”文件显然包含了关于如何在Windows平台上使用Socket进行UDP和TCP通信的示例代码。让我们深入探讨一下Windows Socket编程的基础知识,以及UDP和TCP这两种传输协议的特点。 首先,...

    WebSocket和Socket Client连共同Sever端并实现相互通信(C#、JS、C++)

    PC端一般使用c++或c# socket收发信息,网页端只能使用websocket,手机端是java socket。需要将PC端、手机端和网页端,多端打通同时实现即时通讯,就是需要websocket和socket相互通信。

    AndroidStudio与Unity3D进行Socket通讯

    在Android Studio中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来实现Socket通信。首先,服务器端创建`ServerSocket`监听特定端口,等待客户端连接。然后,客户端使用`Socket`对象连接到服务器,...

    基于TCP/IP通讯 控制拧紧枪

    在本项目中,我们将探讨如何利用C# Winform开发一个客户端应用程序,通过TCP/IP协议与拧紧枪设备进行交互,并使用OpenProtocol来实现控制。 首先,我们需要了解OpenProtocol。OpenProtocol是工业自动化领域的一种...

    Socket 通讯客户端和服务器端

    在编程实现中,Java的`java.net.Socket`和`java.net.ServerSocket`类提供了Socket通讯的支持。Python的`socket`模块也是常用的实现方式。在实际应用中,为了处理并发连接,服务器通常会使用多线程或异步I/O模型,如...

    这是一个用C#写的MES系统 ,用到了supersocket通信框架,以及WPF技术.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    C#通信编程整理(Socket,ActiveMQ,TCP/UDP通讯等)

    在 C# 中,`System.Net.Sockets` 命名空间提供了 Socket 类来支持 TCP 和 UDP 两种协议。 #### 二、Socket类的常用属性与方法 - **属性**: - `AddressFamily`: 指定了 Socket 的地址家族,如 `InterNetwork` 对应...

    android+pc socket通信

    1. **创建Socket对象**:使用`java.net.Socket`类创建Socket实例,指定服务器的IP地址和端口号。 2. **连接服务器**:调用`Socket.connect()`方法与服务器建立连接。 3. **获取输入/输出流**:通过`Socket....

    HP用SOCKET实现(客户端---服务端)

    在PHP中,使用`socket_*`函数族可以轻松地创建、管理和操作Socket。本案例中,我们关注的是基于TCP协议的Socket通信,它提供了一个可靠的数据传输机制。 ### 服务器端(Server.php)代码解析 服务器端首先设置错误...

Global site tag (gtag.js) - Google Analytics