asio tcp client and server implement
asio tcp client and server implement
tcp server
#include <cstdlib> #include <iostream> #include <thread> #include <utility> #include "asio.hpp" using asio::ip::tcp; const int max_length = 1024; void session(tcp::socket sock) { try { for (;;) { char data[max_length]; asio::error_code error; size_t length = sock.read_some(asio::buffer(data), error); if (error == asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw asio::system_error(error); // Some other error. char data_print[max_length]; strncpy(data_print, data, length); data_print[length] = '\0'; std::cout<<data_print<<std::endl; asio::write(sock, asio::buffer(data, length)); } } catch (std::exception& e) { std::cerr << "Exception in thread: " << e.what() << "\n"; } } void server(asio::io_context& io_context, unsigned short port) { tcp::acceptor a(io_context, tcp::endpoint(tcp::v4(), port)); for (;;) { std::thread(session, a.accept()).detach(); } } int main(int argc, char* argv[]) { try { if (argc != 2) { std::cerr << "Usage: blocking_tcp_echo_server <port>\n"; return 1; } asio::io_context io_context; server(io_context, std::atoi(argv[1])); } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; }
tcp client
#include <cstdlib> #include <cstring> #include <iostream> #include "asio.hpp" using asio::ip::tcp; enum { max_length = 1024 }; int main(int argc, char* argv[]) { try { if (argc != 3) { std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n"; return 1; } asio::io_context io_context; tcp::socket s(io_context); tcp::resolver resolver(io_context); asio::connect(s, resolver.resolve(argv[1], argv[2])); std::cout << "Enter message: "; char request[max_length]; std::cin.getline(request, max_length); size_t request_length = std::strlen(request); asio::write(s, asio::buffer(request, request_length)); char reply[max_length]; size_t reply_length = asio::read(s, asio::buffer(reply, request_length)); std::cout << "Reply is: "; std::cout.write(reply, reply_length); std::cout << "\n"; } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; }