Advertisement
AlexNovoross87

Untitled

Jun 4th, 2025 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. Здравствуйте!!! Наглухо встает после 5 итераций записи на сокет из auto values = GetStringValues();
  2.  
  3.  
  4.  
  5. .............................................................................
  6. namespace net = boost::asio;
  7. using tcp = net::ip::tcp;
  8. using task = std::unordered_map<std::string, std::string>;
  9. using task_complex = std::vector<task>;
  10. using shared_socket = std::shared_ptr<tcp::socket>;
  11. using shared_task = std::shared_ptr<task>;
  12. using shared_task_complex = std::vector<shared_task>;
  13. using strand = boost::asio::strand<boost::asio::io_context::executor_type>;
  14. using shared_strand = std::shared_ptr<strand>;
  15.  
  16. КЛИЕНТ:
  17. namespace net = boost::asio;
  18. using tcp = net::ip::tcp;
  19.  
  20. std::shared_ptr<std::ofstream> ofs = std::make_shared<std::ofstream>("log!.txt");
  21.  
  22. net::io_context ioc(16);
  23. shared_socket socket__ = Service::MakeSharedSocket(ioc);
  24. //стримбуфер
  25. auto sb = Service::MakeSharedStreambuf();
  26.  
  27. boost::system::error_code ec;
  28. auto endpoint = tcp::endpoint(net::ip::make_address("127.0.0.1"), 80);
  29.  
  30. void InitSocket(){
  31. socket__->open(endpoint.protocol(), ec);
  32. if (ec)
  33. {
  34. std::cerr << "Open error: " << ec.message() << std::endl;
  35. }
  36.  
  37. socket__->set_option(boost::asio::socket_base::reuse_address(true), ec);
  38. if (ec)
  39. {
  40. std::cerr << "Set option error: " << ec.message() << std::endl;
  41. }
  42.  
  43. socket__->connect(endpoint, ec);
  44. if (ec)
  45. {
  46. std::cerr << "COnnect error: " << ec.message() << std::endl;
  47. }
  48. }
  49.  
  50. std::shared_ptr<std::vector<std::string>> GetStringValues()
  51. {
  52. Service::TokenGen gen;
  53. std::vector<std::string> objs{
  54. UserInterface::US_ChrMakeSendMessage(gen.GenerateHEXToken(), "22sssssssswdqeefvqwef222222222222222222222222222222"),
  55. UserInterface::US_ChrMakeObjDisconnect(gen.GenerateHEXToken()),
  56. UserInterface::US_SrvMakeObjCreateRoom("YANDEX"),
  57. UserInterface::US_SrvMakeObjCreateUser("RRAT", "hjsjklk;l"),
  58. UserInterface::US_SrvMakeObjGetUsers("RRAT"),
  59. UserInterface::US_SrvMakeObjLogin("RRAT", "jijjiw", "kjjolpdpw"),
  60. UserInterface::US_SrvMakeObjRoomList()
  61.  
  62. };
  63. return std::make_shared<std::vector<std::string>>(std::move(objs));
  64. }
  65.  
  66. void Read()
  67. {
  68. auto handler = [](err ec, size_t bytes)
  69. {
  70. if (ec)
  71. {
  72. ZyncPrint(ec.what());
  73. system("pause");
  74. return;
  75. }
  76. auto i = Service::ExtractObjectsfromBuffer(*sb,bytes);
  77. Service::PrintUmap(i);
  78. sb->consume(bytes);
  79. Read();
  80. };
  81. net::async_read_until(*socket__, *sb, '\n', handler);
  82. }
  83.  
  84. void test1()
  85. {
  86.  
  87. try
  88. {
  89. auto values = GetStringValues();
  90. for (auto &&str : *values)
  91. {
  92. net::async_write(*socket__, net::buffer(str), [](err ec, size_t bytes) {
  93.  
  94. });
  95. }
  96.  
  97. }
  98. catch (const std::exception &ex)
  99. {
  100. std::cout << ex.what();
  101. system("pause");
  102. }
  103. }
  104.  
  105. int main()
  106. {
  107.  
  108. //инициализирую сокет
  109. InitSocket();
  110. //Сокет на прослушивание сообщений
  111. Read();
  112.  
  113. for (int i = 0; i < 1; ++i)
  114. {
  115. net::post(ioc,[]{test1();});
  116. }
  117.  
  118. //запуск ioc
  119. Service::MtreadRunContext(ioc);
  120. }
  121.  
  122. СЕРВЕР:
  123.  
  124. void MainServer::ServerSession::HandleSession()
  125. {
  126. if (!Service::IsAliveSocket(*socket_))
  127. {
  128. Service::ShutDownSocket(*socket_);
  129. return;
  130. }
  131. auto self = this->shared_from_this();
  132. net::async_read_until(*socket_, readbuf_, '\n', [self](err ec, size_t bytes)
  133. {
  134.  
  135. if(!ec){
  136.  
  137. auto obj = Service::ExtractObjectsfromBuffer(self->readbuf_, bytes);
  138. Service::PrintUmap(obj);
  139. self->readbuf_.consume(bytes);
  140.  
  141. net::async_write(*(self->socket_),
  142. net::buffer(ServiceChatroomServer::MakeAnswerError("TESTR"," TESTR")),[self](err ec, size_t bytes){
  143. if(!ec){
  144. self->HandleSession();
  145. }
  146. });
  147.  
  148. }});
  149.  
  150. return;
  151. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement