在我的客户端聊天中提升asio获取error_code 10057

时间:2018-03-03 06:25:43

标签: boost server client chat asio

我从增强网站上获取了聊天示例,我试图进行一些修改,但是我得到了一个错误,我对它的内容没有任何想法。服务器仍然与示例相同,我正在客户端上工作,here the original code from boost website

这里对主要内容进行了一些修改:

int main(int argc, char* argv[])
{
   try
   {
       if (argc < 4)
       {
           std::cerr << "Usage: client <host> <port> <keywords> [<keywords>...]\n";
           return 1;
       }
       boost::asio::io_service io_service;

       tcp::resolver resolver(io_service);
       tcp::resolver::query query(argv[1], argv[2]);
       tcp::resolver::iterator iterator = resolver.resolve(query);

       chat_client c(io_service, iterator);

       boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));


       for (int i = 3; i < argc; i++)
       {

           using namespace std;
           chat_message msg;
           msg.body_length(strlen("teste"));
           memcpy(msg.body(), "teste", msg.body_length());
           msg.encode_header();
           c.write(msg);

       }
       c.close();
       t.join();
   }
   catch (std::exception& e)
   {
       std::cerr << "Exception: " << e.what() << "\n";
   }

   return 0;
}

代码在语义上与原始代码类似,但我在do_write方法中尝试async_write时收到错误代码10057,错误代码表示&# 34;不允许发送或接收数据的请求,因为套接字未连接(当使用sendto调用在数据报套接字上发送时)没有提供地址&#34;

我只是坚持下去,我不知道我哪里出错了,请有人指出我的错误吗?

1 个答案:

答案 0 :(得分:0)

您应该放置c.close();在t.join()之后; 2.您应等待2到3秒钟,以使io_service正常运行。 在boost :: thread t之后(boost :: bind(&boost :: asio :: io_service :: run,&io_service))); 应该睡觉(3000);

然后有效