#include <iostream>
#include <boost/asio.hpp>
using namespace std;
using namespace boost::asio;
typedef ip::tcp::acceptor acceptor_type;
typedef ip::tcp::endpoint endpoint_type;
typedef ip::tcp::socket socket_type;
typedef ip::address address_type;
int server()
{
try {
cout<<"Server start..."<<endl;
io_service io;
acceptor_type acceptor(io, endpoint_type(ip::tcp::v4(), 6688));
cout<<acceptor.local_endpoint().address()<<endl;
for(;;) {
socket_type sock(io);
acceptor.accept(sock);
cout<<"Client: "<<sock.remote_endpoint().address()<<endl;
sock.send(buffer("hello asio"));
// sock.write_some(boost::asio::buffer("hello asio"));
}
} catch (std::exception &e) {
cout<<e.what()<<endl;
}
return 0;
}
int client()
{
try {
cout<<"Client start..."<<endl;
io_service io;
socket_type sock(io);
endpoint_type ep(address_type::from_string("127.0.0.1"), 6688);
sock.connect(ep);
char str[100] = {0};
boost::system::error_code ec;
for(;;) {
sock.receive(boost::asio::buffer(str, sizeof (str)), 0, ec);
// sock.read_some(boost::asio::buffer(str, sizeof (str)), ec);
if(ec)
break;
cout<<str<<endl;
}
} catch (std::exception &e) {
cout<<e.what()<<endl;
}
return 0;
}
int main(int argc, char** argv)
{
cout << "Hello World!" << endl;
if(argc !=2) {
cout<<"Use: "<<argv[0]<<" <server/client>"<<endl;
return -1;
}
if(strcmp(argv[1], "server") == 0)
server();
else if (strcmp(argv[1], "client") == 0) {
client();
} else {
cout<<"Use: "<<argv[0]<<" <server/client>"<<endl;
}
return 0;
}
//编译: g++ main.cpp -lboost_thread -lboost_system -lpthread
运行显示图: