最近做项目,需要C#与java间的交互,也就是C#编写服务器,java编写客户端,让两者进行通信。

通信无非就是互发数据,首选Socket技术,通过TCP协议建立长连接,一般是以字节数组的形式传递数据,也就是说,无论传递什么东东,都先拆成字节数组。

既然是面向对象编程,发送的数据要用实体类封装,同时配合List<>泛型集合,可以达到非常好的灵活性、便捷性。

废话少说,本文的核心问题就是:C#与java如通过传递对象通信?

刚开始我也很迷茫,不知道这个能不能实现,但同时又很兴奋,因为自己在做一件很有意思的事。经过探索研究,发现没有问题!可行!下面分享一下!

需要用到的核心技术:

n  Socket。

n  Json。

下面详细讲解实现的关键步骤:

通信关键:

C#和java用Socket通信,发送数据和接收数据可以统一采用UTF-8编码,经过测试,使用UTF-8编码可以成功传递对象。

对于Socket技术,发送数据之前,一般将字符串转换成字节数组,然后发送字节数组;接收数据时,收到的也是字节数组,很多时候需要转换成字符串后使用。

下边是一些常用的转换。

C#语言字符串转换成UTF-8字节数组:

byte[] b = Encoding.UTF8.GetBytes("123");

C#语言UTF-8字节数组转换成字符串:

// receiveData是字节数组,receiveN是字节数组length

string removeMsg = Encoding.UTF8.GetString(receiveData, 0, receiveN);

Java语言字符串转换成UTF-8字节数组:

/* strContent 是要转换的字符串*/

byte[] bs = strContent.getBytes("UTF-8");

Java语言UTF-8字节数组转换成字符串:

/* charArray 是UTF-8格式的字节数组,一般从IO流中获取的时候就指定为UTF-8,read_rst 是字节数组length*/

String resultStr = new String(charArray, 0, read_rst);

序列化关键:

大家都知道,对象是保存在内存中的,具体点说是内存中的堆区。因此当我们尝试保存、传递对象时,必须先把对象序列化,变成字符表示,把无形变成有形。

由于是跨语言的交互,我们即不能用Java特有的序列化方式,也不能用C#特有的序列化方式,必须找一个通用的序列化格式才能交互。显然,Json是不二的选择。

由此可知,我们需要Json完成以下功能:

经过测试,用如下方法可实现上述转换。

C#端可以用开源项目JSON.NET,下载后根据自己的.NET版本,选择相应的Newtonsoft.Json.dll,引用后再添加:using Newtonsoft.Json;using Newtonsoft.Json.Converters;即可使用。

C#用Json序列化对象方法:

//te是要序列化的对象;obj是对象序列化后的字符串

string obj = JsonConvert.SerializeObject(te);

C#用Json反序列化对象方法:

//TestEntity是目标类型;obj是经过Json序列化的对象,字符串形式

TestEntity te = JsonConvert.DeserializeObject(obj);

Java端可以用开源项目google-gson,下载后是一个jar格式的包,直接在项目中导入这个包,并添加引用:import com.google.gson.Gson;即可使用。

Java用Json序列化对象方法:

Gson gson = new Gson();

/*te是需要序列化的对象*/

String s = gson.toJson(te);

Java用Json反序列化对象方法:

Gson gson = new Gson();

/*s是经过Json序列化的对象,字符串类型;TestEntity是目标类型*/

/*注意:使用fromJson方法反序列化一个对象时,该对象的类型必须显示的声明一个不带参数的构造方法*/

TestEntity te = gson.fromJson(s,TestEntity.class);

关键的部分就这些,其他的地方都非常容易实现,网上有很多成熟的代码,就不赘述了。

c#(服务器)与java(客户端)通过socket传递对象_C#(服务器)与Java(客户端)通过Socket传递对象...相关推荐

  1. java数组比较的头文件_C语言和JAVA的区别

    C语言和JAVA的区别 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面是小编 ...

  2. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  3. java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...

    使用Java从客户端套接字读取数据(Read data from a client socket in Java) 我编写了从客户端套接字发送/接收数据的代码. 发送数据步骤已成功完成,但是当我想从套 ...

  4. 利用Java GUI,结合Java Socket,Java多线程,服务器,制作一个简单的具有界面的多用户实时聊天程序(从GUI,到Socket,到多线程,到服务器,项目级别详细教程)

    目录 规划 Java GUI设计 Java Socket Java 服务器 利用 IntelliJ IDEA软件为例 首先,我们应当了解,像运行在两台电脑或者手机终端这样的程序一般是没有办法直接相互发 ...

  5. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  6. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  7. Java中利用socket实现简单的服务端与客户端的通信(入门级)

    Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...

  8. java监听某端口和ip_Java 通过Socket监听指定服务器(IP)的指定端口,及向指定服务器的指定端口发送信息...

    客户端:向指定端口发送信息 package com.jszc.lottery.modules.longpay.util; import java.io.BufferedReader; import j ...

  9. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用

    /*** SimpleHttpServer.java*/importjava.io.*;importjava.net.*;importjava.util.StringTokenizer;/*** 一个 ...

最新文章

  1. Python函数之初体验
  2. 基于 Flink 的典型 ETL 场景实现
  3. Hive UDF,就这
  4. 服务器网站管理页面打不开解决方法
  5. 计算机一级wps选择题必背知识点,计算机一级考试wps选择题专项训练
  6. java封装为so,java挪用.so文件
  7. Android 车联网天气
  8. 8-12 三个定时任务
  9. BEAMnrc参数设置_MainInputs(3)
  10. 《安富莱嵌入式周报》第259期:2022.03.28--2022.04.03
  11. 基于HMM和BP神经网络的睡眠分期算法
  12. 10-新闻发布系统数据库-新闻管理数据操作
  13. 聊一下测试工程师的招聘
  14. Xtract or Ucfyber的最条理的整理入门级教程
  15. 备案注销申请表_怎么注销单个网站备案?
  16. 宁夏小学三年级计算机下册教案,【宁夏三年级信息技术下册教案资讯】宁夏三年级信息技术下册教案足球知识与常识 - 足球百科 - 599比分...
  17. apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)
  18. 知识变现海哥|知识变现五大赛道,你选哪一道?
  19. android脚本 附近的人,前天微信上有个附近的人加我,我发现她是个脚本
  20. 周杰伦等名人网站频被挂马 粉丝上网需警惕

热门文章

  1. C#interface定义及使用浅析
  2. 多线程中的ManualResetEvent
  3. 当店铺关联,你知道怎么办吗
  4. java月份去0_java – 使用月份解析日期而不是前导0
  5. 2019年需要探究的十大战略性技术趋势
  6. ALV OO的栏位属性
  7. Dynpro程序抬头信息要求多值输入的解决方法
  8. 修改Smartfroms默认文本编辑器
  9. 面怎么煮更好吃?你必须知道的7个小技巧
  10. SAP财务中国本土化报表