Advertisement
AlexNovoross87

Untitled

Jun 3rd, 2025 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. Здравствуйте! Не могу понять. Принимаю сокет в обработчике сессии и просто хочу его выключить.
  2. Я запускаю функцию tets1() чтобы все запросы прогнал на сервер. Сервер просто виснет. Ни ошибок не печатает просто пишет что слушает порт и никак не реагирует :
  3.  
  4. "127.0.0.1" |80|
  5. Listening...
  6. SOCKET SHOUTED DOWN
  7. Listening...
  8. SOCKET SHOUTED DOWN
  9. Listening...
  10. И так раз 5 еще....
  11.  
  12. Акцептор:
  13. acceptor_.open(endpoint_.protocol());
  14. acceptor_.set_option(net::socket_base::reuse_address(false));//пытался true делать
  15. acceptor_.bind(endpoint_);
  16. acceptor_.listen(net::socket_base::max_listen_connections);
  17.  
  18. Запускаю другой экземпляр клиента с тем же адресом и портом куда подключиться - сервер просто не реагирует!!!!!
  19. Как защитить сервер чтобы не вис????
  20.  
  21. ***************************ОБРАБОТЧИК СЕССИИ!************************
  22. Просто выключает сокет!!!!!
  23. void HandleSession(std::shared_ptr<tcp::socket> socket)
  24. {
  25. Service::ShutDownSocket(*socket);
  26. };
  27.  
  28.  
  29.  
  30.  
  31. #include "service.h"
  32. #include "tokenizer.h"
  33. #include <boost/asio.hpp>
  34. #include <iostream>
  35.  
  36. namespace net = boost::asio;
  37. using tcp = net::ip::tcp;
  38.  
  39. Функция запуска контекста в многопотоке...........
  40. void MtreadRunContext(net::io_context &ioc)
  41. {
  42. std::vector<jthread> run;
  43. for (int i = 0; i < std::thread::hardware_concurrency(); ++i)
  44. {
  45. run.push_back(jthread([&ioc]
  46. { ioc.run(); }));
  47. }
  48. ioc.run();
  49. }
  50.  
  51. Выключть сокет................
  52. void ShutDownSocket(tcp::socket &sock)
  53. {
  54. boost::system::error_code ec;
  55. sock.cancel(ec);
  56. if(ec){
  57. std::cout << ec.what() << std::endl;
  58. }
  59. sock.shutdown(sock.shutdown_both, ec);
  60. if(ec){
  61. std::cout << ec.what() << std::endl;
  62. }
  63. sock.close();
  64. if(ec){
  65. std::cout << ec.what() << std::endl;
  66. }
  67. };
  68.  
  69.  
  70. Функция прослушки порта:
  71. void MainServer::Listen()
  72. {
  73. std::cout << "Listening...\n";
  74.  
  75. acceptor_.async_accept([&](boost::system::error_code ec, tcp::socket socket)
  76. {
  77. if(ec){
  78. std::cout << ec.value() << " " << ec.message() << '\n' <<
  79. ec.what() << '\n';
  80. }
  81. std::shared_ptr<ServerSession> servsess = std::make_shared<ServerSession>(this);
  82. servsess->HandleSession(std::make_shared<tcp::socket>(std::move(socket)));
  83. Listen();
  84. });
  85.  
  86. if (is_first_run_)
  87. {
  88. Service::MtreadRunContext(ioc_);
  89. is_first_run_ = false;
  90. };
  91. }
  92.  
  93.  
  94.  
  95. ---------------------------------------------------------------------------
  96. void test1()
  97. {
  98.  
  99. try
  100. {
  101.  
  102. net::io_context ioc(16);
  103. tcp::socket socket{ioc};
  104. boost::system::error_code ec;
  105. auto endpoint = tcp::endpoint(net::ip::make_address("127.0.0.1"), 80);
  106.  
  107. socket.open(endpoint.protocol(), ec);
  108. if (ec)
  109. {
  110. std::cerr << "Open error: " << ec.message() << std::endl;
  111. }
  112.  
  113. socket.set_option(boost::asio::socket_base::reuse_address(true), ec);
  114. if (ec)
  115. {
  116. std::cerr << "Set option error: " << ec.message() << std::endl;
  117. }
  118.  
  119. socket.connect(endpoint, ec);
  120. if (ec)
  121. {
  122. std::cerr << "COnnect error: " << ec.message() << std::endl;
  123. }
  124.  
  125. task mp;
  126. std::optional<std::string> reas = std::nullopt;
  127. std::string str = "";
  128. Service::TokenGen gen;
  129.  
  130. // boost::asio::io_context ioc;
  131. str = UserInterface::US_ChrMakeSendMessage(gen.GenerateHEXToken(), "22sssssssswdqeefvqwef222222222222222222222222222222");
  132.  
  133. net::post(ioc, [&]()
  134. { net::write(socket, net::buffer(std::move(str))); });
  135.  
  136. str = UserInterface::US_ChrMakeObjDisconnect(gen.GenerateHEXToken());
  137. net::post(ioc, [&]()
  138. { net::write(socket, net::buffer(std::move(str))); });
  139.  
  140. str = UserInterface::US_SrvMakeObjCreateRoom("YANDEX");
  141. net::post(ioc, [&]()
  142. { net::write(socket, net::buffer(std::move(str))); });
  143.  
  144. str = UserInterface::US_SrvMakeObjCreateUser("RRAT", "hjsjklk;l");
  145. net::post(ioc, [&]()
  146. { net::write(socket, net::buffer(std::move(str))); });
  147.  
  148. str = UserInterface::US_SrvMakeObjGetUsers("RRAT");
  149. net::post(ioc, [&]()
  150. { net::write(socket, net::buffer(std::move(str))); });
  151.  
  152. str = UserInterface::US_SrvMakeObjLogin("RRAT", "jijjiw", "kjjolpdpw");
  153. net::post(ioc, [&]()
  154. { net::write(socket, net::buffer(std::move(str))); });
  155.  
  156. str = UserInterface::US_SrvMakeObjRoomList();
  157. net::post(ioc, [&]()
  158. { net::write(socket, net::buffer(std::move(str))); });
  159. Service::MtreadRunContext(ioc);
  160. }
  161. catch (const std::exception &ex)
  162. {
  163. std::cout << ex.what();
  164. system("pause");
  165. }
  166.  
  167. // ioc.run();
  168. }
  169.  
  170. int main()
  171. {
  172. for (int i = 0; i < 10; ++i)
  173. {
  174. test1();
  175. }
  176. /// system("pause");
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement