//服务端
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/asio.hpp>
using namespace boost::asio;
//链接客户端处理
void ConnectionClientProcess(ip::tcp::socket * sockClient)
{
std::cout<<sockClient->remote_endpoint().address()<<std::endl;
//向客户端发送hello world!
boost::system::error_code ec;
while(true)
{
sockClient->write_some(buffer("abcdefg"),ec);
//如果出错,打印出错信息
if(ec)
{
std::cout<<boost::system::system_error(ec).what()<<std::endl;
break;
}
Sleep(200);
}
}
int main(int argc, char* argv[])
{
std::list<boost::thread *> listThreadClient;
std::list<ip::tcp::socket *> listSocketClient;
//io_service对象
io_service iosev;
ip::tcp::acceptor acceptor(iosev,ip::tcp::endpoint(ip::tcp::v4(),1000));
for(;;)
{
//socket对象
ip::tcp::socket * socketClient = new ip::tcp::socket(iosev);
//等待直到客户端连接进来
acceptor.accept(*socketClient);
//显示连接进来的客户端
listSocketClient.push_back(socketClient);
boost::thread * thr = new boost::thread(ConnectionClientProcess,socketClient);
listThreadClient.push_back(thr);
//与当前客户交互完成后循环继续等待下一客户连接
}
//等待线程都退出
std::list<boost::thread *>::iterator iter = listThreadClient.begin(),iterEnd = listThreadClient.end();
for(iter; iter!= iterEnd; iter++)
{
(*iter)->join();
}
std::list<ip::tcp::socket *>::iterator iterSock = listSocketClient.begin(),iterEndSock = listSocketClient.end();
for(iterSock; iterSock!= iterEndSock; iterSock++)
{
(*iterSock)->close();
}
return 0;
}
//客户端
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
int main(int argc, char* argv[])
{
//io_service对象
io_service iosev;
//socket对象
ip::tcp::socket socket(iosev);
//连接端点
ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"),1000);
//连接服务器
boost::system::error_code ec;
socket.connect(ep,ec);
//如果出错,打印出错信息
if(ec)
{
std::cout<<boost::system::system_error(ec).what()<<std::endl;
return -1;
}
//接收数据
char buf[100] = {0};
size_t len=socket.read_some(buffer(buf),ec);
std::cout.write(buf,len);
return 0;
}