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

#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;
}

异步

#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();
	}
}

相关推荐

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

    2024-04-14 23:52:03       19 阅读
  2. UDP发送接受数据

    2024-04-14 23:52:03       39 阅读
  3. udp进行数据发送接收

    2024-04-14 23:52:03       35 阅读
  4. Qt中对Udp数据打包发送接收(续)

    2024-04-14 23:52:03       36 阅读
  5. 如何在Linux命令行下发送接收UDP数据包

    2024-04-14 23:52:03       42 阅读
  6. QT网络编程之实现UDP广播发送接收

    2024-04-14 23:52:03       20 阅读
  7. C#学习系列之UDP同端口发送接收

    2024-04-14 23:52:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 23:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 23:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 23:52:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 23:52:03       20 阅读

热门阅读

  1. Linux发送HTTP请求

    2024-04-14 23:52:03       14 阅读
  2. 华为OD-C卷-最长子字符串的长度(一)[100分]

    2024-04-14 23:52:03       13 阅读
  3. IP协议

    IP协议

    2024-04-14 23:52:03      14 阅读
  4. UE5+GIS技术应用场景介绍

    2024-04-14 23:52:03       14 阅读
  5. 7天八股速记之C++后端——Day 2

    2024-04-14 23:52:03       15 阅读
  6. leetcode热题HOT 207. 课程表(拓扑排序)

    2024-04-14 23:52:03       14 阅读