Thrift小试牛刀:实现Windows_C#_客户端与Linux_C++_服务端通信
来源:互联网 发布:北京软件开发 编辑:程序博客网 时间:2024/06/01 09:04
1.下载thrift windows版本
a.官网下载
地址:http://thrift.apache.org/docs/install/windows
如果不需要部署Windows Thrift服务器,只需要下载源码即可。
b.编译thrift.dll
打开上图的工程,编译Thrift工程,生成thrift.dll(若报错,需要切换.net框架到4.5)
2.在linux生成C#客户端文件
具体生成方式参考另外一篇入门文章:《安装Thrift并写一个简单的测试程序》
http://blog.csdn.net/ceasadan/article/details/52277136
a.新建demo.thrift文件,输入如下内容
struct UserProfile{ 1:i32 id, 2:string name, 3:string blurb} service UserStorage{ void store(1: UserProfile user), UserProfile getUser(1: i32 uid)}
b.输入C#的Thrift指令,根据demo.thrift文件生成相应语言的文件:
thrift -r --gen csharp demo.thrift
如上图所示生成了UserProfile.cs和UserStorage.cs
3.在Windows vs2013中新建控制台C#程序
a.引用步骤1中生成的:thrift.dll
b.加入步骤2中生成的:UserProfile.cs和UserStorage.csxx.cs文件加入到工程
c.新建HelloWroldImpl.cs文件:引入接口(点击UserStorage.Iface自动生成接口)
class HelloWroldImpl : UserStorage.Iface { public void store(UserProfile user) { throw new NotImplementedException(); } public UserProfile getUser(int uid) { throw new NotImplementedException(); } }d.新建HelloWorldServiceClient.cs文件
填写Server的IP和端口
class HelloWorldServiceClient { public const string SERVERIP = "172.16.61.66"; public static int SERVERPORT = 9090; public static int TIMEOUT = 5000; public void startClient(String username) { TTransport transport = null; try { transport = new TSocket(SERVERIP, SERVERPORT, TIMEOUT); //协议要和服务端一致 TProtocol protocol = new TBinaryProtocol(transport); UserStorage.Client client = new UserStorage.Client(protocol); transport.Open(); UserProfile user = new UserProfile(); user.Id = 1; user.Name = "liqb"; user.Blurb = "aaaaaa"; client.store(user); UserProfile user2; user2 = client.getUser(1); Console.WriteLine("Thrift client result =: " ); } catch (Exception e) { Console.WriteLine(e.StackTrace); } finally { if (null != transport) { //close transport.Close(); } } } }
e.main函数添加代码,启动客户端:
static void Main(string[] args) { new HelloWorldServiceClient().startClient("testtxt232"); }
f.启动程序调试。
如果报错被远程主机拒绝:需要linux关闭防火墙,并且开启iptables开放端口4.Linux C++ 服务端程序
具体生成方式参考另外一篇入门文章:《安装Thrift并写一个简单的测试程序》
http://blog.csdn.net/ceasadan/article/details/52277136
5.常见error处理
a.Thrift: Tue Aug 23 17:57:20 2016 TConnectedClient processing exception: Bad version identifier
解决:
协议不一致造成的。服务端是TBinaryProtocol,客户端是TCompactProtocol。
- Thrift小试牛刀:实现Windows_C#_客户端与Linux_C++_服务端通信
- C#实现Thrift服务端与客户端
- Android实现Thrift服务端与客户端
- socket通信例子_服务端写客户端读多线程写法
- Socket实现服务端与客户端通信
- socket实现客户端与服务端通信(一)服务端
- socket实现客户端与服务端通信(三)服务端升级
- 黑马程序员_网络编程中的服务端与客户端
- thrift JAVA服务端 python客户端的实现
- java实现Thrift服务端和客户端
- thrift JAVA服务端 python客户端的实现
- Thrift 各种服务端和客户端实现
- socket实现客户端与服务端通信(二)客户端
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- 警察与小偷的实现之一客户端与服务端通信
- 多线程(二)_服务端和客户端的单条信息的通信
- SDUTACM 双向队列
- HDU2204 第一道...超级水的容斥
- 基于MFC的Windows多国语版本软件 —— 加载资源dll
- 第八章、epub文件处理 -- 定位指定段落
- 二维码
- Thrift小试牛刀:实现Windows_C#_客户端与Linux_C++_服务端通信
- 与生科、计生同学联合大创 任务一:计算N50 byC 语言,以及JAVA(所查找资料汇总)
- 正则表达式
- JS利用正则配合replace替换指定字符
- VS2010 c++生成和调用dll例子
- 高德地图
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
- [已解决] android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
- 会说话