客戶端主要包括以下主要函式過程:初始化
ssl演算法函式、連線並接收伺服器訊息執行緒函式、向伺服器傳送訊息函式。
1
.初始化
ssl演算法
此過程的**新增在
oninitdialog
方法中。處理過程如下:(1
)初始化
openssl
演算法庫ssl_load_error_strings();
ssleay_add_ssl_algorithms();(2
)初始化
ssl客戶端協議演算法
ctx = ssl_ctx_new (sslv23_client_method());//
設定ssl
協議版本
其處理流程圖如圖
所示:2
.連線並接收伺服器訊息執行緒函式
連線伺服器端,並接收伺服器端訊息的執行緒處理函式
void clientthreadproc(void* void_parm)
。通過createthread
呼叫該函式。其處理過程如下:(1
)初始化
windows socket
環境if (wsastartup(makeword(1, 1), &wsadata))(2
)初始化
sockaddr_in
結構體,設定伺服器位址和埠。
//新建
socket
sd = socket (af_inet, sock_stream, 0);
memset (&sa, '/0', sizeof(sa));
//設定服務端
ip位址、和埠
sa.sin_family= af_inet;
sa.sin_addr.s_addr = dwip;
sa.sin_port= htons(8443);(3
)連線伺服器。
err = connect(sd, (struct sockaddr*) &sa,sizeof(sa)); (
4)新建
ssl連線控制代碼。
ssl = ssl_new (ctx);(5
)設定socket
控制代碼到ssl
控制代碼。ssl_set_fd (ssl, sd);(6
)建立ssl
鏈結。err = ssl_connect (ssl);(7
)呼叫select
非同步等待伺服器端訊息。
for(;;)
buffer[len]='/0';
char *msg = (char *)malloc(len +1);
strcpy(msg,buffer);
//通過
wm_client_msg
訊息,傳送到主窗體
sendmessage(afxgetmainwnd()->getsafehwnd(),wm_client_msg,sd,(long )msg);
}其處理過程如圖
所示:
3
.向伺服器端傳送訊息函式
直接呼叫
ssl_write
,向伺服器傳送訊息。在
void cclientdlg::onsend()
函式新增如下**:
if(client.fd !=0)
else
同時伺服器端和客戶端都使用了自定義的
windows
訊息wm_client_msg
,處理執行緒傳送到主窗體的資料。
XFire客戶端流程分析及案例
下面是xfire客戶端呼叫的流程分析圖,本文後續部分將圍繞該圖展開。服務模型是xfire中非常重要的概念之一,包含了服務的介面資訊 操作資訊 binding資訊等諸多服務呼叫過程中需要的資訊。因此在進行服務呼叫之前首先要建立服務模型。建立服務模型的工作是由服務工廠servicefactory完成的,...
客戶端提交mr job原始碼流程分析
job job.getinstance獲得job物件 job.set 新增configuration等配置引數 job.waitforcomplete 原始碼內部實則呼叫submit 方法 之後jobsubmiter中有個成員cluster cluster中又有個成員proxy 物件,幫助提交到ya...
NFS客戶端流程理解
系統呼叫 vfs readir inode i fop 這是在inode初始化時候,填入的鉤子函式,一般會填成nfs的函式nfs readdir nfs readdir 先在快取中查詢,如沒找到,則傳送乙個rpc操作號給伺服器,伺服器接收到操作號。呼叫對應的procedure,然後呼叫vfs的 co...