boost asio 的同步方式

2021-06-16 13:57:58 字數 1166 閱讀 2876

boost.asio是乙個跨平台的網路及底層io的c++

程式設計庫,它使用現代c++

手法實現了統一的非同步呼叫模型。

標頭檔案

#include
名空間

using namespace boost::asio;
asio庫能夠使用tcp、udp、icmp、串列埠來傳送/接收資料,下面先介紹tcp協議

的讀寫操作

對於讀寫方式,asio支援同步和非同步兩種方式,首先登場的是同步方式,下面請同步方式自我介紹一下:

端,我會做個socket交給acceptor物件,讓它一直等客戶端連進來,連上以後再通過這個socket與客戶端通訊, 而所有的通訊都是以阻塞方式進行的,讀完或寫完才會返回。

在客戶端也一樣,這時我會拿著socket去連線伺服器,當然也是連上或出錯了才返回,最後也是以阻塞的方式和伺服器通訊。

有人認為同步方式沒有非同步方式高效,其實這是片面的理解。在單執行緒的情況下可能確實如此,我不能利用耗時的網路操作這段時間做別的事 情,不是好的統籌方法。不過這個問題可以通過多執行緒來避免,比如在伺服器端讓其中乙個執行緒負責等待客戶端連線,連線進來後把socket交給另外的執行緒去 和客戶端通訊,這樣與乙個客戶端通訊的同時也能接受其它客戶端的連線,主線程也完全被解放了出來。

我的介紹就有這裡,謝謝大家!

好,感謝同步方式的自我介紹,現在放出同步方式的演示**(起立鼓掌!):

伺服器端

#include 

#include 

using

namespace boost::asio; 

int main(int argc, char* argv) 

// 與當前客戶互動完成後迴圈繼續等待下一客戶連線

} return 0; 

}

客戶端
#include 

#include 

using

namespace boost::asio; 

int main(int argc, char* argv) 

// 接收資料

char buf[100]; 

size_t len=socket.read_some(buffer(buf), ec); 

std::cout.write(buf, len); 

return 0; 

}

從演示**可以得知

boost asio的Tcp同步方式

boost.asio是乙個跨平台的網路及底層io的c 程式設計庫。標頭檔案 include命名空間 using namespace boost asio using boost asio ip tcp asio庫能夠使用tcp udp icmp 串列埠來傳送 接收資料,本文件介紹tcp協議的同步讀寫...

boost asio程式設計 同步TCP

boost.asio庫是乙個跨平台的網路及底層io的c 程式設計庫,它使用現代c 手法實現了統一的非同步呼叫模型。boost.asio庫支援tcp udp icmp通訊協議。下面介紹同步tcp模式 在伺服器端,我會做個socket交給acceptor物件,讓它一直等客戶端連進來,連上以後再通過這個s...

boost asio中的C S同步例項原始碼

近來狂熱地研究boost的開發技術,現將讀書筆記整理如下 需要說明的是,本博該專題下面關於boost的原始碼是採用boost1.55版本,執行在ubuntu 14.04 64bit下面,使用apt包安裝 非原始碼編譯安裝 後續不再做說明.同步socket型別的伺服器原始碼實現 g g sync tc...