Boost Asio,聊天示例:如何在消息正文中手动写入? [chat_message.hpp]
Posted
技术标签:
【中文标题】Boost Asio,聊天示例:如何在消息正文中手动写入? [chat_message.hpp]【英文标题】:Boost Asio, chat example: How do I manually write in the body of the message? [chat_message.hpp] 【发布时间】:2016-05-14 15:24:18 【问题描述】:我正在关注 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】:我找到了。我应该检查一下示例应用程序是如何做到的,它只是使用来自cstring
库的memcpy
。因此,任何和我有同样问题的人都应该使用以下方法:
chat_client.cpp
文件的main
:
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
用于将该行复制到邮件正文中。
【讨论】:
以上是关于Boost Asio,聊天示例:如何在消息正文中手动写入? [chat_message.hpp]的主要内容,如果未能解决你的问题,请参考以下文章
C++ 使用 Boost.asio 和 Beast 库在正文中发送数据