C ++输入和输出流

时间:2011-07-22 10:03:48

标签: c++ iostream

C ++的输入流是否有可能从像msn,yahoo这样的聊天室中读取并返回某种消息? 只是想知道我搜索网络,其中大部分需要客户端和服务器。

我是这个

的新手

3 个答案:

答案 0 :(得分:3)

没有;这两个概念只有相似之处。

  1. C ++ iostream是一种非常低级的结构,用于从操作系统设备(例如文件系统,FIFO,套接字等)读取字节。
  2. 聊天服务是通过高级协议实现的,例如XMPP,它通过操作系统提供的套接字API在TCP上运行。
  3. 简而言之,它们是粉笔和奶酪。

    通过iostream工具提供对套接字的访问已有名义上的努力,该工具旨在以这种方式进行扩展。然而,这些库从未在主流C ++编程中获得显着的吸引力。即使他们拥有,他们仍然需要很长时间才能实现像XMPP一样复杂的协议。

答案 1 :(得分:0)

是的,如果你能找到(或写)一个库来实现这种抽象。

正如Marcelo所说,聊天服务等使用复杂的协议进行操作。但是关于stdio和文件流可以说类似的东西 - 写入文件或文本模式显示有很大的复杂性(甚至没有提到GUI中的控制台窗口)。大多数复杂性已经被操作系统和标准库抽象出来了。

仍然可以编写一个库来抽象出大多数复杂性。然后,该库可以提供充当输入和/或输出流的对象,遵循与标准流相同的约定,并继承相同的基础。

这可能是一个很好的方法,但AFAIK很少见。也许我错了 - 我从来没有为这种事情编程。但如果我是对的,可能的原因是库经常被编写为与C和C ++兼容。

此外,即使在C ++程序员中,流抽象并不总是被认为是一个很好的特性。很多人都希望将它们限制为stdio和文件I / O,并且不会将流识别为更一般的抽象。

顺便说一句 - 这与马塞洛斯的回答并不矛盾。 “如果你能找到(或写一个)图书馆”是一个很大的问题。

答案 2 :(得分: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 ++流程都有机会