我想通過套接字發送單個字符。在接收端,它總是以空字符結尾。有什麼建議麼?C++單個字符未通過套接字發送
發送部分
char message[7];
in_addr addr;
inet_aton(splitter_socket_.local_endpoint().address().to_string().c_str(), &addr);
(*(in_addr *)&message) = addr;
(*(uint16_t *)(message + 4)) = htons(splitter_socket_.local_endpoint().port());
(*(char *)(message+6))=htons('M');
splitter_socket_.send(boost::asio::buffer(message));
接收
boost::array<char, 7> buf;
char *raw_data = buf.data();
boost::asio::ip::address ip_addr;
int port;
read((*serve_socket), boost::asio::buffer(buf));
in_addr ip_raw = *(in_addr *)(raw_data);
ip_addr = boost::asio::ip::address::from_string(inet_ntoa(ip_raw));
port = ntohs(*(short *)(raw_data + 4));
char sig = ntohs(*(char *)(raw_data+6));
這總會被執行的一部分。意思是,sig總是一個空字符 但是我發送了'M'。這是缺少的。
if(sig==0){
number_of_monitors_++;
TRACE("The number of monitors increased to "<<number_of_monitors_);
}
我送被正確
我不知道ASIO,但我知道它是異步的。你確定ASIO在你從調用'send'的函數返回後沒有使用緩衝區嗎? –