星期二, 4月 21, 2009

簡單的 Boost::asio 範例

Boost::asio 是在 C++ Boost Libaray 中支援 Socket Programming 的 library,但是其實它的文件我有看沒有懂,其實底層是採用 Unix Socket 做為實作,整個實作算是蠻詳細的,但是到目前為止不太會(其實我也沒有想要用很多功能啊...Orz),所以寫了一個 Example Code

先談編譯好了,example code 會使用到 Boost::array, Boost::system ,前者是只有 header only,還算好解決,後者就需要 linked library,如果想要編譯的話,編譯指令可能會長成這樣子

g++ -o httpget asio_example.cpp -L /usr/local/lib/libboost_system-xgcc40-mt.dylib
也就是說,你得想辦法 link to Boost::system (我是在 Mac OSX 上試的,如果是在 linux 底下,可以試試 libtool )使用上的話比較簡單,直接這樣子用即可./httpget www.google.com.tw理論上會截到整個 html code

這個 code 其實不長,然後這個程式碼只是範例,真的要處理的字串很大時,就不建議了,但是小型工作要勝任應該是沒有太大問題 XD,裡面最主要的是 class BoostTCPConnect

class BoostTCPConnect{
public:
BoostTCPConnect(char* address, char* service); // 分別填入 address, service(port)
void writeString(const std::string& out_message); // 送資料
void readString(std::string& in_message); // 讀資料
};
沒了,就這麼簡單,在 main() 裡面,則是嘗試對伺服器送出 http request,之後收回來,連錯誤都沒有處理,不過我想這樣子應該夠哩 XD

其實有空應該蠻想多嘗試的,只是我真的覺得 Boost::asio 的文件不是人看的...Turioal 打開竟然是範例...其實我還蠻想知道,這種文件看不懂是我的問題,還是文件本身的問題 XD?


---
只好慢慢的猜了XD

2 則留言:

Dim 提到...

我这几天也开始尝试看asio,可是发现仅看官方的那些范例和文档真的很难懂。

yen3 提到...

我是直接看 unix network programming 之後再來看 boost::asio 就變的比較容易看懂了... 直接看應該不是一個好方法