2011-07-22 171 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++流都面临的机遇