服务端
// tcpServer.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include <iostream> #include <boost/asio.hpp> #include <boost/system/error_code.hpp> #include <boost/asio/ip/address.hpp> using namespace boost::asio; int main() { try { typedef ip::tcp::acceptor acceptor_type; typedef ip::tcp::endpoint endpoint_type; typedef ip::tcp::socket socket_type; std::cout << "sercer start." << std::endl; io_service io; acceptor_type acceptor(io, endpoint_type(ip::tcp::v4(), 6688)); std::cout << acceptor.local_endpoint().address() << std::endl; for (;;) { socket_type socket(io); acceptor.accept(socket); std::cout << "client:"; std::cout << socket.remote_endpoint().address() << std::endl; std::cout << socket.local_endpoint().address() << std::endl; socket.send(buffer("hello client, i am server.")); } } catch (std::exception& e) { std::cout << e.what() << std::endl; } getchar(); std::cout << "Hello World!\n"; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
acceptor(io, endpoint_type(ip::tcp::v4(), 6688));
客户端
// tcpClient.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include <iostream> #include <vector> #include <boost/asio.hpp> #include <boost/system/error_code.hpp> #include <boost/asio/ip/address.hpp> using namespace boost::asio; int main() { try { typedef ip::tcp::endpoint endpoint_type; typedef ip::tcp::socket socket_type; typedef ip::address address_type; std::cout << "client start." << std::endl; io_service io; socket_type socket(io); endpoint_type ep( address_type::from_string("127.0.0.1"), 6688); socket.connect(ep); Sleep(1000); //测试时,一定要加,否则会乱码或者其它情况出现;不加,得到的接收长度是0 std::cout << socket.available() << std::endl; //方式一 //std::vector<char> str(socket.available() + 1, 0); ////通过容器接收 //socket.receive(buffer(str)); //std::cout << "receive form " << socket.remote_endpoint().address() << std::endl; //std::cout << &str[0]; //通过字符串接收 //char *p= new char [socket.available() + 1]; //socket.receive(buffer(p, socket.available() + 1)); //std::cout << "receive form " << socket.remote_endpoint().address() << std::endl; //std::cout << p << std::endl; //方式二 std::vector<char> str(socket.available() + 1, 0); boost::system::error_code ec; for (;;) { socket.read_some(buffer(str), ec); if (ec) { break; } std::cout << &str[0]; } } catch (const std::exception& e) { std::cout << e.what() << std::endl; } getchar(); std::cout << "Hello World!\n"; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件