用于使用 istream/ostream 传输消息的类似网络协议
Analogous network protocol for transmitting messages using istream/ostream
这是一个来自编码挑战的问题,我不知道该怎么做——
根据下面的原型实现 encode() 和 decode() 用于简单的线路协议:
void encode ( const std::string& inputFilename, std::ostream& out );
void decode ( std::istream& in, const std:string& outputFilename );
假设有多个文件,每个文件都包含一条消息。正如原型中已经说过的那样,编码必须从磁盘读取单个指定的文件并将消息放在 ostream 中。
解码必须从 istream 读取单个编码的消息,并将其放在指定的文件中。两个相应文件的内容必须相同。
如果我可以在编码方法中读取文件并将数据放在缓冲区中并将它们发送到解码方法中的另一个文件,这很容易,但这不是问题。如何在没有人实际在控制台上键入数据的情况下从std::istream
读取数据(如std::cin
)?
提前感谢您的时间,并希望看到对此的回应!
iStream是ifStream(输入文件流)
和iStringStream(输入字符串流)的父类,因此您可以作为输入参数传递ifStream或IstringStream。不需要使用cin。这同样适用于 out 参数,您可以提供 ofstream 或 ostringstream 的对象。这是众所周知的机制,C++抽象出您处理的特定类型的流。
我写了一段代码,可以与问题中给出的原型一起使用。我相信可能有更多的方法可以做到这一点,但我想我会分享这个。
class fileIO
{
private:
std::string inBuf;
public:
std::stringstream testbuf;
void encode(const std::string& inputFilename, std::ostream& out);
void decode ( std::istream& in, const std::string& outputFilename);
};
void fileIO::encode(const std::string& inputFilename, std::ostream& out)
{
//read from the input file and stream it to ostream
ifstream infile(inputFilename);
while(infile.good()){
getline(infile, inBuf);
out << inBuf;
}
cout << "Value stored in outBuf: " << inBuf << endl;
infile.close();
}
void fileIO::decode(std::istream& in, const std::string& outputFilename)
{
//read from istream and output it to a file
string val;
ofstream ofile(outputFilename);
in >> val;
cout<< "Read the istream contents: " << val << endl;
ofile << val;
ofile.close();
}
int main( int argc, char ** argv )
{
fileIO File;
string inputFile;
cout << "Enter input File Name: "<< endl;
cin >> inputFile;
File.encode(inputFile, File.testbuf);
File.decode(File.testbuf, inputFile);
return 0;
}
我正在传递"字符串流"来编码和解码,因为 istream 和 ostream 是字符串流的父类。在此解决方案中,输入文件中的值存储在字符串流中,并传递到解码,其中来自同一字符串流的值被写入输出文件。
相关文章:
- 协议缓冲区ParseFromString不检查消息结尾
- 如何使用标准库网络 TS 在服务器和客户端之间发送消息C++
- 提升 ASIO 在基于 TCP 的协议中查找消息的开头
- 协议缓冲区#3将消息从c ++发送到c#
- Steam协议C 解压缩多消息
- Tcp 协议前缀消息的长度
- 使用 UDP 协议从 Windows 套接字发送到 Qt 套接字的网络数据包上的结构编码和解码
- 将二进制数据缓冲区存储在协议缓冲区消息中
- 根据网络消息c++创建列表
- 打包用于 UDP 网络的消息
- 如何将多个协议缓冲区的消息写入可附加的压缩文件中?
- C++中的Google协议缓冲区:从现有结构中创建消息
- 自己的C++网络协议:如何定义唯一的二进制报文值
- 协议缓冲区-读取所有消息中通用的标头(嵌套消息)
- 网络编程.确定消息的结尾
- 消息在网络上的两台机器之间传递
- Arduino不支持使用websocket协议发送超过65535个字符的消息
- 用于使用 istream/ostream 传输消息的类似网络协议
- 实现应用程序网络协议的安全问题
- c++和Java有哪些记录和重播网络协议存根/模拟工具?