我有以下问题: 有我的结构:
struct NET_CONNECTION_DISPATCH
{
int len;
int data_str_len;
const char * data_str;
};
这里使用了结构:
const std::string dstr = "127.0.0.1 11001";
ncd.len = 8 + dstr.length();
ncd.data_str_len = dstr.length();
ncd.data_str = dstr.c_str();
之后我想通过boost asio发送它:
boost::asio::async_write(socket_, boost::asio::buffer((char*)&ncd, ncd.len),
boost::bind(&Connection::handle_write, shared_from_this(),
boost::asio::placeholders::error));
在客户端收到的消息中,一切都很好,只有8字节(标题)。 消息的字符串部分由随机字节填充。 我做错了什么? 我尝试了很多选项,结果总是相同。 感谢。
答案 0 :(得分:1)
字符不在您的结构中。该结构包含一个指针,并且您将在结构之后发送指针和一些额外的随机字节。
看起来你只是想尝试发送一个字符串(你的结构中没有其他任何东西),所以你应该做两次写:字符串长度的4字节写入,然后是字节的N字节写入实际的字符串数据。
答案 1 :(得分:1)
data_str是一个指针,data_str的值只是一个4字节的内存地址。当你使用(char *)& ncd时,& ncd的内容只有三个整数。 如果你真的想以这种方式使用那个结构,你应该单独输出data_str。
boost::asio::async_write(socket_, boost::asio::buffer(ncd.data_str, ncd.len-8),
boost::bind(&Connection::handle_write, shared_from_this(),
boost::asio::placeholders::error));