2011-07-22 255 views
0

C++的輸入流是否可以從msn,yahoo等聊天室中讀取並返回某種消息? 只是想知道我搜索網絡,大部分需要客戶端和服務器。C++輸入輸出流

我是這個新手

回答

3

不是;這兩個概念只有一個相似之處。

  1. C++輸入輸出流是一個非常低的水平構造用於讀取數據和接收操作系統的設備如文件系統,FIFO中,插座等
  2. 聊天服務過高層協議,如XMPP實現,它們通過由OS提供的套接字API在TCP上運行。

總之,他們是粉筆和奶酪。

已經有名義上的努力通過iostream設施提供對套接字的訪問,該設施旨在以這種方式進行擴展。但是,這些庫在主流C++編程中從未獲得過重要的關注。即使他們有,他們仍然還有很長的路要走,像XMPP一樣複雜。

+0

哦TY的答案我只是想知道這就是 – ricedragon

0

是的,如果你能找到(或寫)一個庫來實現這個抽象。

正如馬塞洛所說,聊天服務等使用複雜的協議進行操作。但是對於stdio和文件流可以說類似的東西 - 寫入文件或文本模式顯示器的複雜性相當大(甚至沒有提到GUI中的控制檯窗口)。大部分複雜性已經被操作系統和標準庫抽象出來了。

仍然可以編寫一個庫來抽象出大部分複雜性。然後,該庫可以提供充當輸入和/或輸出流的對象,遵循與標準流相同的約定,並從相同的基礎繼承。

這可能是一種很好的方法,但AFAIK很少見。也許我錯了 - 我從來沒有真正爲這種事情編程。但是如果我是對的,一個可能的原因是庫經常被編寫爲與C和C++兼容。另外,即使在C++程序員之間,流抽象並不總是被認爲是一個很好的特性。很多人希望看到它們僅限於stdio和文件I/O,並且不認爲流是更普遍的抽象。

順便說一句 - 這不是Marcelos答案的真正矛盾。那「如果你能找到(或寫)一個圖書館」是一個很大的假設。

0

您可以創建一些類,例如MY_CLIENT。 在這個類,你需要實現的功能

std::streamsize write(const char *s, std::streamsize n); 
std::streamsize read(char* s, std::streamsize n); 

在該功能需要實現聊天室邏輯的協議,如何將數據發送到,和閱讀。

之後,看看boost::iostreams庫。有了它,你可以寫水木清華這樣的:

boost::iostreams::stream< MY_CLIEN> my_chat_stream; 

而且my_chat_stream可以作爲std::istream, std::ostream使用你的程序,所有的C++流都面臨的機遇