我正在关注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 ++比较陌生,我似乎没有找到一个好的解决方案。 有没有正确的方法呢?
非常感谢你。
答案 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
用于将行复制到邮件正文中。