之前寫過一些如何使用 acl 的伺服器框架編寫伺服器程式的技術文章(如果僅是寫一些簡單的伺服器程式,有時倒不必如此麻煩, acl 的 c++ 庫部分也提供了一些簡單的伺服器類,本文將介紹如何使用這些簡單的類來實現一些伺服器程式和網路客戶端程式。
首先介紹 acl 中的伺服器類:server_socket。該類定義了如下幾個簡單方法:
/**
* 開始監聽給定服務端位址
* ip:port;在 unix 環境下,還可以是域套介面,格式為:
* /path/***
* @return 監聽是否成功
*/bool open(const char* addr);
/*** 關閉已經開啟的監聽套介面
* @return 是否正常關閉
*/bool close();
/*** 接收客戶端連線並建立客戶端連線流
* @param timeout 在阻塞模式下,當該值 > 0 時,採用超時
* 方式接收客戶端連線,若在指定時間內未獲得客戶端連線,則返回 null
* @return 返回空表示接收失敗
*/socket_stream* accept(int timeout = 0);
/*** 獲得監聽的位址
* @return 返回值非空指標
*/const char* get_addr() const
使用上述網路服務類的步驟是:呼叫 open 監聽本機的乙個網路位址(如果是unix平台,還可以監聽unix域套介面)------> 呼叫 accept 方法等待遠端客戶端連線本伺服器 ------> 當伺服器程式接收到客戶端連線時 accept 方法返回客戶端連線網路流(socket_stream) ------> 啟動乙個執行緒處理這個客戶端連線。下面為乙個簡單的伺服器程式:
#include "acl_cpp/lib_acl.hpp"
// 處理客戶端連線的執行緒類
class client_thread : public acl::thread
~client_thread()
protected:
// 實現基類 acl::thread 中定義的純虛方法
void* run() }
private:
acl::socket_stream* client_;
};int main(void)
while (true)
// 建立乙個子執行緒用來處理該客戶端連線
client_thread* thread = new client_thread(client);
// 將執行緒設為分離模式,這樣當執行緒退出時會自行釋放執行緒相關資源
thread->set_detachable(true);
// 啟動該執行緒
thread->start();
} return 0;
}
上面例子非常簡單,毋庸詳述,關於如何使用 acl 編寫多執行緒程式,請參照:使用 acl_cpp 庫編寫多執行緒程式。下面再給出乙個簡單的網路客戶端例子:
#include "acl_cpp/lib_acl.hpp"
int main(void)
const char* req = "hello world!\r\n";
acl::string buf;
// 向伺服器寫一行資料,同時從伺服器讀一行資料,迴圈 10 次
for (int i = 0; i < 10; i++)
// 從伺服器讀一行資料,注:第二個引數為預設的 true,意思是獲得
// 一行資料後自動將尾部的 \r\n 去掉
if (conn.gets(buf) == false)
printf("response: %s\r\n", buf.c_str());
} return 0;
}
技術部落格:
download:
svn:svn checkout svn: acl-code
github:
qq 群:242722074
使用tcp select實現客戶端與客戶端的通訊
使用多路復用實現客戶端與客戶端進行通訊 原理 客戶端只要一連上伺服器,立馬給伺服器傳送使用者名稱,然後在服務端將newsocketfd 存放在同乙個結構體中,客戶端先給伺服器傳送資料,然後通過伺服器 給客戶端。伺服器先會查詢對應名字的 newsocketfd 然後向該 newsocketfd 中寫入...
ssh客戶端簡單使用
secure shell,只是一種協議,實現它的軟體有很多,我們常用的開源又免費的軟體叫openssh,分為客戶端和服務端。不是運維,服務端我沒搞過,所以這裡只講客戶端用法,大部分程式設計師應該只要知道客戶端使用就好了。安裝openssh clients,然後就可以通過ssh agent連線遠端伺服...
簡單服務端和客戶端的開發
在程式設計之前我安裝了一些軟體工具包,其中包括vc2005 gsoap flash builder 4.5等等,我利用vc2005開發服務端,fb來開發客戶端,當然我對於這些工具以及環境還不是很熟悉,也是第一次來動手寫關於這方面的,現在對於其中一些原理有了大概的了解了。我首先動手寫的是服務端,關於服...