thrift下C 伺服器和客戶端開發

2021-06-22 09:38:32 字數 2580 閱讀 4617

我用的是c++,所以我舉乙個c++的例子,簡單說一下thrift的使用入門。

例子描述是這樣的:我們將學生資訊(學號,姓名,性別,年齡)由客戶端傳送到服務端。

實現這個例子,我們大致要做以下幾部分事情:

(1)書寫.thrift檔案

(2)生成cpp檔案

(3)編寫客戶端

(4)編譯cpp檔案並執行

(1)書寫.thrift檔案

學生資訊是有結構的,所以我們使用thrift的struct即可,為了達到通訊的目的,我們必須使用service。

所以最後書寫成的student.thrift檔案內容如下:

struct student

service serv

(2)生成cpp檔案

生成cpp檔案很簡單,只需要乙個thrift命令即可:

/home/xiaoshe/opt/bin/thrift -r --gen cpp student.thrift

--gen 後指定生成的語言,生成的cpp儲存在目錄gen-cpp下

命令執行後,將會在./gen-cpp/目錄下生成如下檔案:

serv.cpp

serv.h

serv_server.skeleton.cpp

student_constants.cpp

student_constants.h

student_types.cpp

student_types.h

注意檔案的大小寫:

serv開頭的檔案是由service生成的,這個關鍵字很重要,下面還會見到以它開頭的類。

student是根據student.thrift檔案的名生成的。

這些檔案可以進行編譯,生成最初的服務端。

(3)編寫客戶端

使用thrift命令後,我們並沒有得到我們想要的客戶端client源**,因此客戶端程式要由我們自己編寫實現。然而很幸運,我們可以使用下面的**段來編寫我們client程式:

[c-sharp]view plain

copy

print?

#include "serv.h" 

// 替換成你的.h 

#include 

#include 

#include 

using namespace apache::thrift; 

using namespace apache::thrift::protocol; 

using namespace apache::thrift::transport; 

using boost::shared_ptr; 

int main(int argc, char **argv)  

(4)編譯cpp檔案並執行

編譯服務端:g++ -g -i/home/xiaoshe/opt/include/thrift -l/home/xiaoshe/opt/lib/ -lthrift serv.cpp student_types.cpp student_constants.cpp serv_server.skeleton.cpp -o server

編譯客戶端:g++ -g -i/home/xiaoshe/opt/include/thrift -l/home/xiaoshe/opt/lib/ -lthrift -lm -pthread -lz -lrt -lssl serv.cpp student_types.cpp student_constants.cpp client.cpp -o client

執行服務端:./server

執行客戶端:./client

(5)傳輸我們的資料student資訊

到此客戶端已經連上了服務端,但服務端只有這樣的響應(no more data to read),因為二者之間還沒有資料互動。

我們把客戶端當做傳送端,修改client.cpp向服務端傳送資料。

在「// 我們的**寫在這裡」

寫下我們的**:

// 先建立乙個student型別的變數,student是我們在student.thrift中定義過的

student s;

s.sno = 123;

s.sname = "xiaoshe";

s.s*** = 1;

s.sage = 30;

// 再定義乙個物件client,又是以"serv"開頭的類

servclient client(protocol);

// 最後呼叫put函式向服務端傳輸資料, put是student.thrift採用service定義的成員函式。

// 呼叫put後,服務端也呼叫相應的put()

client.put(s);

服務端負責接收資料,也做相應修改:

在類servhandler()的put()中:

printf("sno=%d sname=%s s***=%d sage=%d/n", s.sno, s.sname.c_str(), s.s***, s.sage);

最後編譯,執行服務端,啟動客戶端後,服務端收到訊息,顯示結果為:

putsno=123 sname=xiaoshe s***=1 sage=30

至此,客戶端已能向服務端傳送資料了。

Thrift 各種服務端和客戶端實現

簡單的單執行緒服務模型 import org.apache.thrift.texception import org.apache.thrift.tprocessor import org.apache.thrift.protocol.tbinaryprotocol import org.apach...

Ruby SSL socket 伺服器和客戶端

首先需要準備好伺服器端的證書和key 其次需要準備好客戶端的證書和key 所有伺服器客戶端的證書和key都需要是同乙個ca簽署的。首先請看伺服器 require socket require openssl cacrtf ca.crt crtf server.crt keyf server.key ...

伺服器與客戶端

建立socket操作,建立流式套接字,返回套接字型大小socksrv socket socket int af,int type,int protocol 第乙個引數,指定位址簇 tcp ip只能是af inet,也可寫成pf inet socket socksrv socket af inet,s...