C#实现Thrift服务端与客户端

15 篇文章 0 订阅

这一篇是将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服务端与客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值