c++输入和输出流

C++ input and output streams

本文关键字:输出流 输入 c++      更新时间:2023-10-16

是否有可能为c++ '输入流读取从聊天室如msn,雅虎和类似的东西,并返回某种消息?只是想知道,因为我搜索网络,大部分需要客户端和服务器。

我是新手

不;这两个概念只有一点相似之处。

    c++ iostreams是一个非常低级的结构,用于从操作系统设备(如文件系统、fifo、socket等)中读取字节。
  1. 聊天服务通过XMPP等高级协议实现,XMPP通过操作系统提供的套接字api在TCP上操作。

总之,他们是截然不同的。

已经有了名义上的努力,通过iostream工具提供对套接字的访问,它被设计成以这种方式扩展。然而,这些库在主流c++编程中从未获得显著的吸引力。即使他们做到了,他们离实现像XMPP这样复杂的协议还有很长的路要走。

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

正如Marcelo所说,聊天服务等使用复杂的协议运行。但是对于工作室和文件流也有类似的情况——写入文件或文本模式显示(甚至还没有提到GUI中的控制台窗口)都有相当多的复杂性。大部分的复杂性已经被操作系统和标准库抽象掉了。

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

这可能是一个好方法,但我敢说这是罕见的。也许我错了——我从来没有真正为这种事情编写过程序。但是,如果我是对的,一个可能的原因是库经常被编写为同时兼容C和c++。

而且,即使在c++程序员中,流抽象也并不总是被认为是一个好特性。很多人希望看到它们被限制在工作室和文件I/O上,并没有真正认识到流是一个更一般的抽象。

BTW -这与马塞洛斯的回答并不矛盾。"如果你能找到(或编写)一个库"是一个很大的假设。

您可以创建一些类,例如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++流机会