boost asio同步接收发送UDP数据包

cpp 复制代码
#include <boost/asio.hpp>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <iostream>

#define SERVER

enum { max_length = 1024 };
using namespace std;
using namespace boost;
using boost::asio::ip::udp;

int main(int argc, char** argv) {

	try {
#ifdef SERVER
		cout << "server start ......" << endl;
		asio::io_context io;
		auto serPointn=udp::endpoint(udp::v4(), 6688);
		udp::socket sock(io, serPointn);

		char buf[0xFF];
		udp::endpoint cliPoint;
		while (1) {
			sock.receive_from(asio::buffer(buf), cliPoint);
			sock.send_to(asio::buffer(buf), cliPoint);
		}
#else
		asio::io_context io;
		udp::socket sock(io);
		sock.open(asio::ip::udp::v4());

		udp::endpoint serPoint=udp::endpoint(asio::ip::address::from_string("127.0.0.1"), 6688);

		while (1) {
			char buf[0xFF];
			cin >> buf;
			sock.send_to(asio::buffer(buf), serPoint);
			memset(buf, 0, 0xFF);
			sock.receive_from(asio::buffer(buf), serPoint);
			cout << buf << endl;
		}
		::system("pause");
#endif // 
	}
	catch (std::exception& e) {
		std::cerr << "Exception" << e.what() << "\n";
	}
	return 0;
}

异步

cpp 复制代码
#include<iostream>
#include"boost/asio.hpp"
#include"boost/bind.hpp"
using namespace std;
using namespace boost;
using asio::ip::udp;

void sock_recv(char* buf, udp::socket* sock, udp::endpoint* cliPoint);
void sock_send(char* buf, udp::socket* sock, udp::endpoint* cliPoint);


int main() {
	cout << "server start ......" << endl;
	asio::io_context io;
	
	udp::socket *sock=new udp::socket(io, udp::endpoint(udp::v4(), 6688));

	char *buf=new char[0xFF];
	udp::endpoint *cliPoint=new udp::endpoint;

	sock->async_receive_from(asio::buffer(buf,0xFF),*cliPoint,
boost::bind(sock_recv,buf,sock,cliPoint));

	io.run();

}


void sock_send(char* buf, udp::socket* sock, udp::endpoint* cliPoint) {
	try
	{
		sock->async_receive_from(asio::buffer(buf, 0xFF), *cliPoint, 
boost::bind(sock_recv, buf, sock, cliPoint));
	}
	catch (const std::exception& e)
	{
		cout << e.what();
	}
	
}

void sock_recv(char* buf, udp::socket* sock, udp::endpoint* cliPoint) {
	try
	{
		sock->async_send_to(asio::buffer(buf, 0xFF), *cliPoint, 
boost::bind(sock_send, buf, sock, cliPoint));

	}
	catch (const std::exception& e)
	{
		cout << e.what();
	}
}
相关推荐
爱吃喵的鲤鱼6 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
7年老菜鸡34 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Ni-Guvara42 分钟前
函数对象笔记
c++·算法
似霰1 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier
何曾参静谧2 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
AI街潜水的八角2 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习