boost之asio同步io使用实例

本文介绍了一个使用Boost Asio库实现的简单同步TCP客户端与服务器的示例代码。客户端连接到服务器并发送消息,服务器接收消息并响应确认。该示例展示了基本的TCP通信流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// boost_sync_client.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/pool/singleton_pool.hpp>

#include <winsock2.h>
#include <mswsock.h>
#include <MSTcpIP.h>
#include <errno.h>
#include <ws2ipdef.h>
#include <process.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "mswsock.lib")

using namespace boost::asio;
int tcp_sync_client(const char *ip,unsigned short port)
{
	boost::asio::io_service service;
	boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string(ip), port);
	boost::asio::ip::tcp::socket sock(service);
	try
	{
		sock.connect(ep);
	}
	catch (const boost::system::system_error& e)
	{
		return e.code().value();
	}

	int ret = sock.send(boost::asio::buffer("hello i am client"));
	if (ret < 0)
	{
		return ret;
	}
	while (1)
	{
		char data[512];
		int len = sock.read_some(boost::asio::buffer(data));
		if (len > 0)
		{
			printf("recv data:%s\n",data);
			/*int ret = sock.send(boost::asio::buffer("hello i am client"));
			if (ret < 0)
			{
				printf("send failed:%d\n",ret);
				return ret;
			}*/
		}
	}
	return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
	tcp_sync_client("0.0.0.0", 5000);
	return 0;
}


// boost_sync_server.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/pool/singleton_pool.hpp>

#include <winsock2.h>
#include <mswsock.h>
#include <MSTcpIP.h>
#include <errno.h>
#include <ws2ipdef.h>
#include <process.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "mswsock.lib")
using namespace boost::asio;
void client_session(sock_ptr sock)
{
	while (1)
	{
		char data[512];
		size_t len = sock->read_some(boost::asio::buffer(data,512));
		if (len > 0)
		{
			write(*sock,boost::asio::buffer("ok",2));
			sock->write_some(boost::asio::buffer("ok",2));
		}
	}
}

void tcp_sync_sever()
{
	boost::asio::io_service service;
	boost::asio::ip::tcp::endpoint ep(ip::tcp::v4(), 5000);
	boost::asio::ip::tcp::acceptor acc(service, ep);
	while (1)
	{
		sock_ptr sock(new ip::tcp::socket(service));
		acc.accept(*sock);
		boost::thread(boost::bind(client_session, sock));
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	tcp_sync_sever();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值