C#实现Thrift服务端与客户端_c# thrift 客户端连接-程序员宅基地

技术标签: C#  c#  thrift  Thrift  

这一篇是将Android和C#实现Thrift服务端和客户端中C#部分单独拆分开来的,方便不需要Android的开发者使用。
编写Thrift文件
写个简单的,有输入参数,无返回值,文件命名为 HelloWorld.thrift

service HelloWorldService{
    void SayHello(1:string msg);
}

根据Thrift文件生成对应的C#和java文件,生成的C#和java都只有一个文件。

这里写图片描述

可以看到我用的是Thrift 0.10.0版本

C# Thrift服务端和客户端实现,并实现消息发送及接收
创建一个WinForm应用程序,命名为Thrift_HelloWorld_Csharp。
将生成的C#文件拷到项目中,并包含在项目里。在Nuget中添加thrift-csharp的引用,0.10.0版本的。
目录结构如图:

这里写图片描述

最后要实现的效果是:当前程序启动一个Thrift服务,并且能通过当前程序调用Thrift Client发送消息到服务端。
效果如下:
这里写图片描述

点击【启动】即可启动C#服务端,填写完正确的端口号,点击【发送】即可完成消息发送,因为是在本机测试,所以Ip地址固定为127.0.0.1。输入Android映射出来的端口号即可完成与Android服务端通信。

Thrift Server 代码:

    public class HelloWorldServer : HelloWorldService.Iface
    {
        public static void Run(int port)
        {
            HelloWorldServer client = new HelloWorldServer();
            HelloWorldService.Processor processor = new global::HelloWorldService.Processor(client);
            TServerTransport transport = new TServerSocket(port);
            TServer server = new TThreadPoolServer(processor, transport);

            Console.WriteLine("Starting the server...");

            server.Serve();

            transport.Close();
        }

        public void SayHello(string msg)
        {
            Console.WriteLine(string.Format("{0:yyyy/MM/dd hh:mm:ss} {1}", DateTime.Now, msg));
        }
    }

调用Run方法即可启动Thrift服务,需另开一个线程运行此方法才不会阻塞下面的功能。

Thrift Client发送消息至服务端代码:

    public static class HelloWorldClient
    {
        public static void Say(int port, string msg, string ip = "127.0.0.1")
        {
            TTransport transport = new TSocket(ip, port);
            TProtocol protocol = new TBinaryProtocol(transport);
            HelloWorldService.Client client = new HelloWorldService.Client(protocol);

            transport.Open();
            try
            {
                client.SayHello(msg);
            }
            catch (TApplicationException x)
            {
                Console.WriteLine(x.StackTrace);

            }
            finally
            {
                transport.Close();
            }
        }
    }

调用Say方法即可实现消息发送。当将port设置为服务端端口号时即可实现发送消息至当前服务端。
就是这么简单。
源码地址:
C#实现的Thrift服务端与客户端

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lwwl12/article/details/77116253

智能推荐

【CODE[VS]】1023--GPA计算_gpa输入的第一行-程序员宅基地

文章浏览阅读172次。题目描述 Description        小松终于步入了大学的殿堂,带着兴奋和憧憬,他参加了信息科学技术学院的新生大会。会上,院长梅教授给大家介绍了在大学中的成绩计算方式:        需要解释一下的是,小_gpa输入的第一行

【每天1分钟】MarkDown语法学习之插入代码块_idea markdown 插入代码块-程序员宅基地

文章浏览阅读2w次,点赞8次,收藏7次。【每天1分钟】MarkDown语法学习之插入代码块Markdown在IT圈子里面比较流行的一个重要原因是,它能够轻松漂亮地插入代码。方法是,使用反引号`进行包裹即可。如果是行内代码引用,使用单个反引号进行包裹这是一段 var x = 3 行内代码如果插入一整段代码,需要至少使用两个以上反引号进行包裹, 看效果:fun (x: Int, y: Int): Int { return x ..._idea markdown 插入代码块

Redis面试篇-程序员宅基地

文章浏览阅读1.3k次,点赞29次,收藏20次。缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都会去查数据库,数据库的压力增大。缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。客户端对数据库中的数据主要有两类操作,读(select)与写(DML)。缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。

这种格式的时间 2022-08-12 12:13:00 ,判断它是今天还是明天,还是几天后_["2023-12-08 13:45","2023-12-09 13:45"]取时间-程序员宅基地

文章浏览阅读98次。这种格式的时间 2022-08-12 12:13:00 ,判断它是今天还是明天,还是几天后_["2023-12-08 13:45","2023-12-09 13:45"]取时间

【MySQL】Error 2006:MYSQL server has gone away_mysql5.7 [err] 2006 - mysql server has gone awa-程序员宅基地

文章浏览阅读369次。问题的描述MFC应用程序远程访问MYSQL数据库,程序初始化时创建一个连接池,通常保存10个连接用于访问数据库使用。该程序平时运行正常,但是程序正常使用后闲置一个晚上不关闭,第二天第一次使用报错如标题。分析使用命令查询数据库超时参数,服务器安装MYSQL 数据库版本为5.7.22。查询命令:show global variables like '%timeout';..._mysql5.7 [err] 2006 - mysql server has gone awa

最强Android入门开发指南,帮你打通Android的任督二脉_android 开发指南-程序员宅基地

文章浏览阅读687次。Android 新手想要入门,很容易会遇到各类困难和学习瓶颈。没有一个好学的学习方向,学习规划,学习教程,这都是新手会面临的问题。 很多人会在百度上搜索,查阅相关资料。但是网上搜索的很多资料,都是断片式的学习,缺乏完整性和系统性。那么新手应该从何学起?这样学习呢?这里给大家一份最强Android入门指南:_android 开发指南

随便推点

算法中的各种距离(欧式距离,马氏距离,闵可夫斯基距离......)_马氏距离中间那个矩阵是啥-程序员宅基地

文章浏览阅读1.9w次,点赞7次,收藏60次。在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。本文目录:1.欧氏距离2.曼哈顿距离3. 切比雪夫距离4. 闵可夫斯基距离_马氏距离中间那个矩阵是啥

kettle 提交数据量_kettle——入门操作(表输出)详细-程序员宅基地

文章浏览阅读820次。表输出控件如下1)步骤名称,2)数据库连接,前面有过部分解释3)目标模式,数据库中的概念,引用:https://www.cnblogs.com/csniper/p/5509620.html(感谢)4)目标表:数据库中的表,这里有两种方式:(1) 应用数据库中已经存在的表,浏览表选中对应表即可,下图有部分sql功能。ddl可以执行ddl语句。(2) 创建新的表,填写表的名字,点击下面的sql就可以执..._kettle 步骤 提交

Sublime 多行编辑快捷键_submlite 同时操作多行 macos-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏2次。鼠标选中多行,按下 widows 下 Ctrl Shift L( Mac下 Command Shift L)即可同时编辑这些行;鼠标选中文本,反复按widows 下CTRL D(Mac下 Command D)即可继续向下同时选中下一个相同的文本进行同时编辑;鼠标选中文本,按下Alt F3(Win)或Ctrl Command G(Mac)即可一次性选择全部的相同文本进行同时编辑;..._submlite 同时操作多行 macos

如何双启动Linux和Windows-程序员宅基地

文章浏览阅读252次。尽管Linux是具有广泛硬件和软件支持的出色操作系统,但现实是有时您必须使用Windows,这可能是由于关键应用程序无法在Linux下运行。 幸运的是,双重引导Windows和Linux非常简单-本文将向您展示如何使用Windows 10和Ubuntu 18.04进行设置。 在开始之前,请确保已备份计算机。 尽管双启动设置过程不是很复杂,但是仍然可能发生事故。 因此,请花点时间备份您的重要..._windows linux双启动

【flink番外篇】1、flink的23种常用算子介绍及详细示例(1)- map、flatmap和filter_flink 常用的分类和计算-程序员宅基地

文章浏览阅读1.6w次,点赞25次,收藏20次。本文主要介绍Flink 的3种常用的operator(map、flatmap和filter)及以具体可运行示例进行说明.将集合中的每个元素变成一个或多个元素,并返回扁平化之后的结果。按照指定的条件对集合中的元素进行过滤,过滤出返回true/符合条件的元素。本文主要介绍Flink 的3种常用的operator及以具体可运行示例进行说明。这是最简单的转换之一,其中输入是一个数据流,输出的也是一个数据流。下文中所有示例都是用该maven依赖,除非有特殊说明的情况。中了解更新系统的内容。中了解更新系统的内容。_flink 常用的分类和计算

(转)30 IMP-00019: row rejected due to ORACLE error 12899-程序员宅基地

文章浏览阅读590次。IMP-00019: row rejected due to ORACLE error 12899IMP-00003: ORACLE error 12899 encounteredORA-12899: value too large for column "CRM"."BK_ECS_ORDER_INFO_00413"."POSTSCRIPT" (actual: 895, maximum..._row rejected due to oracle

推荐文章

热门文章

相关标签