Boost Asio,聊天示例:如何手动写入邮件正文? [chat_message.hpp]

时间:2016-05-14 15:24:18

标签: c++ string boost char boost-asio

我正在关注Boost Asio教程中的“chat example”。由于我对Boost Asio没有多少经验,我正在使用聊天示例实现我自己的客户端服务器应用程序,并根据我的需要对其进行修改。

现在我定义了一个Protocol.hpp文件,其中包含网络协议的关键字。例如:

Protocol.hpp

#ifndef PROTOCOL_HPP
#define PROTOCOL_HPP

#include <iostream>

extern const char ACK;

#endif

Protocol.cpp

#include "Protocol.hpp"

const char ACK = "1";

如果你看一下“chat_message.hpp”课程,你会发现以下内容:

  const char* data() const
  {
    return data_;
  }

  char* data()
  {
    return data_;
  }

我尝试了以下内容:

std::sprintf(write_msgs_.data(), ACK, 2);

除了尝试直接分配所需的代码之外 - 我想我正在获取const函数 - :

write_msgs_.data() = ACK;

我曾考虑使用string类,然后以某种方式将其转换为char,以便在write_msgs_.data()中复制它,或者甚至用循环添加每个字符。我对C ++比较陌生,我似乎没有找到一个好的解决方案。 有没有正确的方法呢?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

我找到了。我应该检查示例应用程序是如何做到的,它只是使用memcpy库中的cstring。因此,任何遇到与我相同问题的人都应该使用以下内容:

main文件的

chat_client.cpp

char line[chat_message::max_body_length + 1];
while (std::cin.getline(line, chat_message::max_body_length + 1))
{
  using namespace std; // For strlen and memcpy.
  chat_message msg;
  msg.body_length(strlen(line));
  memcpy(msg.body(), line, msg.body_length());
  msg.encode_header();
  c.write(msg);
}

正如您所看到的,有一个char line变量将保存书面文本。在此之后,memcpy用于将行复制到邮件正文中。