boost asio-ssl async_write给我发了很多胡言乱语

boost asio ssl async_write send me mostly gibberish

本文关键字:胡言乱语 asio-ssl async write boost      更新时间:2023-10-16

我正在使用boost::asio::ssl 将非安全套接字转换为ssl

虽然使用非ssl一切都很好,但async_write给我发来的大多是胡言乱语。

有趣的是,当我在每个async_write之间放入sleep(1(时,我得到的大多是好数据,但有点胡言乱语(类似于"???@??"(

我发送数据的速度越快,它就越胡言乱语。。。我完全不明白这个问题!

initSSLConnection:

boost::asio::ssl::context *m_context = new boost::asio::ssl::context(m_acceptor.io_service(), boost::asio::ssl::context::sslv23);
 m_context->set_options(boost::asio::ssl::context::default_workarounds
                       | boost::asio::ssl::context::no_sslv2
                       | boost::asio::ssl::context::single_dh_use);
 m_context->set_password_callback(boost::bind(&Server::get_password, this));
 m_context->use_certificate_chain_file("./ssl_key/cert.pem");
 m_context->use_private_key_file("./ssl_key/key.pem", boost::asio::ssl::context::pem);

写入套接字:

while (1) {
boost::asio::async_write(m_socket,                                              
                          boost::asio::buffer(ss.str().c_str(), ss.str().size()),
                          boost::bind(&MyClass::done_writing,                        
                                      shared_from_this())
                          );
}

以下是我不睡觉时得到的结果(1(:

`?D`?@?pR???c??_?@?pR??c?@?pR??␌?@???␌?D◆?P0AE0004J0??@?⎻RP0AE0004J0??@?XJ┘?D◆?P0AE0004J0??X?┬±?>   ␋┌≤C5700␌??┬±??>    ␋┌≤C5700␌?????┐?>   ␋┌≤C5700␌?????????┬±??┐?
                       ?┴?^>    ␋┌≤C5700␌??
                                           ?┴?^^>   ␋┌≤C5700␌?????
                                                                      ?┴?>  ␋┌≤C5700␌?V
          ??@
             ?┴?>   ␋┌≤C◆????␋┌≤F1DA0?│?ADO14F⎼␋???@?⎻R
                                                           ?    ␋┌≤D9A90?┌?┬±?
                                                                              ?┴?┬±?
    ?┴??┐?ADO14F⎼␋⎻??@?⎻R?
?
 6A7BD600?≠??┌?◆????␋┌≤21ADC?├???
␉
◆????␋┌≤21ADC?├???
◆????␋┌≤21ADC?├??◆????␋┌≤21ADC?├??

似乎是编码的什么的。。。

我通过以下命令行连接到服务器:

openssl s_client -ssl3 -connect 127.0.0.1:4242 

问题是您正在交错写入。。

while (1) {
boost::asio::async_write(m_socket,                                              
                          boost::asio::buffer(ss.str().c_str(), ss.str().size()),
                          boost::bind(&MyClass::done_writing,                        
                                      shared_from_this())
                          );
}

您应该只执行下一个async_write,一旦第一个完成,即在done_writing处理程序中。这就是为什么你打更多的电话时会收到垃圾。。。