C#使用Thrift简介,C#客户端和Java服务端相互交互

本文主要介绍两部分内容:

  • C#中使用Thrift简介
  • 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互。
  • 用纯C#实现Client和Server

其中使用到RPC学习----Thrift快速入门和Java简单示例,这篇文章创建的Java服务端。

一、C#中使用Thrift简介

关于rpc的简介,可以参考:RPC学习----Thrift快速入门和Java简单示例

1、下载thrift

1)点击下载:thrift-0.9.1.tar.gz(或者http://thrift.apache.org/download)

2)Thrift compiler for Windows (thrift-0.9.1.exe) 

两个都要下载。

2、引入thrift.dll

这里将下载好的.gz文件解压后,然后找到lib目录

用vs打开后,如下图所示,然后右键--》重新生成---》生成thrift.dll

3、生成cs文件

hello.thrift

service  HelloWorldService {
string sayHello(1:string username)
}

使用命令生成cs文件:

thrift-0.9.1.exe -gen csharp hello.thrift

关于thrift-0.9.1.exe的使用方法可以查看命令: thrift-0.9.1.exe -help

将生成的HelloWorldService.cs文件拷入项目中。

二、C#客户端发送消息到Java生成的服务端,实现跨平台操作

1、启动Java版的服务端

2、使用vs新建一个winform程序

button点击事件:

      private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != null)
{
new HelloWorldServiceClient().startClient(textBox1.Text.Trim());
}
}

HelloWorldServiceClient.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Thrift.Protocol;
using Thrift.Transport;
using Thrift; namespace thrfitCsharp
{
class HelloWorldServiceClient
{
public const string SERVERIP = "localhost";
public static int SERVERPORT = 8090;
public static int TIMEOUT = 3000; public void startClient(String username)
{
TTransport transport = null;
try
{
transport = new TSocket(SERVERIP, SERVERPORT, TIMEOUT);
//协议要和服务端一致
TProtocol protocol = new TCompactProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(protocol);
transport.Open();
String result = client.sayHello(username);
Console.WriteLine("Thrift client result =: " + result); }
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
finally
{
if (null != transport)
{
//close
transport.Close();
}
}
} }
}

HelloWroldImpl.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace thrfitCsharp
{
class HelloWroldImpl : HelloWorldService.Iface
{ public string sayHello(string username){
Console.WriteLine("hello"+username);
return "hello" + username;
} }
}

效果图:

注:下面是改进版的,主要添加了纯C#版的:

纯C#版是说用C#实现客户端和服务端,下面是纯c#版的输出:

本文源码https://github.com/amosli/rpc/tree/thriftCsharp

纯C#版实现主要参考http://www.cnblogs.com/hanmos/archive/2011/09/15/2177891.html

 

C#使用Thrift简介,C#客户端和Java服务端相互交互的更多相关文章

  1. RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互

    本文主要介绍两部分内容: C#中使用Thrift简介 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互. 用纯C#实现Client和Server C#服务端,Java客户端 其中 ...

  2. Socket通讯-C#客户端与Java服务端通讯(发送消息和文件)

    设计思路 使用websocket通信,客户端采用C#开发界面,服务端使用Java开发,最终实现Java服务端向C#客户端发送消息和文件,C#客户端实现语音广播的功能. Java服务端设计 packag ...

  3. Unity3D客户端和Java服务端使用Protobuf

    转自:http://blog.csdn.net/kakashi8841/article/details/17334493 前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖 ...

  4. thrift配置——windows客户端与linux服务端通信(C++)

    windows客户端: 1.首先要安装boost库 下载源文件 2.安装boost之前先要安装python-3.4.0.amd64,很多地方没有说,弄了很久 3.运行bootstrap.bat 生成b ...

  5. C++客户端访问Java服务端发布的SOAP模式的WebService接口

    gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以 简单快速地开发出SOAP/XML的服务器端和客户端 Step1 使用gsoap-2.8\gsoap\bin\win32\wsdl ...

  6. android客户端向java服务端post发送json

    android 端: private void HttpPostData() {        try { HttpClient httpclient = new DefaultHttpClient( ...

  7. thrift例子:python客户端/java服务端

    java服务端的代码请看上文. 1.说明: 这两篇文章其实解决的问题是,当使用python去访问大数据线上集群的时候,遇到两个问题: 1)python-hadoop和python-hive相关包链接不 ...

  8. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

  9. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. UVA662- Fast Food

    题意:在一条公路上,有n个酒店,要建造k个供给站(建造在酒店所在的位置),给出酒店的位置,求怎么样建造供给站才干使得每一个酒店都能得到服务且所要走的路程最短. 思路:在i到j酒店建立一个供给站,要使得 ...

  2. S3C2416裸机开发系列19_Fatfs播放录像wav音频文件

    S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩    1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...

  3. Ruby 一些经常使用的细节

    1.try 永远不会抛出异常 在 没有的时候 返回 nil province_id = Province.find_by_name(prov).try(:id) 2.find(:first, :con ...

  4. php:的图形计算器的面向对象的版本武器2

    通过自带部分result.class.php分流,由于这三个类继承shape这个类,让我们来看看,面向对象的继承. shape.class.shape档 <?php abstract class ...

  5. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  6. Cocos2d-x v3.0 正式版 如何创建一个项目,TestCpp执行

    欢迎增加 Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24456579 首先到 ...

  7. 【关节点+桥】关节点和桥模板 Tarjan

    #include <cstdio> #include <cstring> #include <algorithm> using namespace std; con ...

  8. 用jQuery写了一个模态框插件

    用jQuery写了一个模态框插件 大家觉得下面的框框好看么, 水印可以去掉(这个任务交给你们了(- o -)~zZ); "info"框 $("div").con ...

  9. iOS开发- 拨打电话总结

    关于iOS应用拨打电话, 我所知道的有3种办法, 详细例如以下: 一.利用openURL(tel) 特点: 直接拨打, 不弹出提示. 而且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨 ...

  10. oracle_powerdesinger逆向工程 , PDM 文件 注释到name的完美解决方案 comment2name

    1. 从oracle 到 PDM文件  逆向工程中 ,需要注意 去掉“” ,这个百度下很多帖子,用于去掉引号 2. 从注释copy到name运行脚本会有个问题就是 ,有些注释太长,不美观 解决方案, ...