当前位置: 首页 > news >正文

邛崃做网站网页设计学生作业模板

邛崃做网站,网页设计学生作业模板,国外网站建站,中国网站建设网以下是一个使用独立的 C Asio 库实现的 UDP 服务器的示例代码。这个 UDP 服务器可以监听指定端口&#xff0c;接收客户端发送的数据&#xff0c;并将接收到的数据原样返回给客户端。 #include <iostream> #include <asio.hpp> #include <array>class UdpSer…

以下是一个使用独立的 C++ Asio 库实现的 UDP 服务器的示例代码。这个 UDP 服务器可以监听指定端口,接收客户端发送的数据,并将接收到的数据原样返回给客户端。

#include <iostream>
#include <asio.hpp>
#include <array>class UdpServer {
public:// 构造函数,初始化服务器并开始接收数据UdpServer(asio::io_context& io_context, short port): socket_(io_context, asio::ip::udp::endpoint(asio::ip::udp::v4(), port)) {startReceive();}private:// 开始异步接收数据的方法void startReceive() {socket_.async_receive_from(asio::buffer(data_, max_length), sender_endpoint_,[this](const asio::error_code& ec, std::size_t bytes_recvd) {if (!ec && bytes_recvd > 0) {handleReceive(bytes_recvd);} else {startReceive();}});}// 处理接收到的数据的方法void handleReceive(std::size_t length) {std::cout << "Received " << length << " bytes from "<< sender_endpoint_.address().to_string() << ":"<< sender_endpoint_.port() << std::endl;std::cout << "Message: " << std::string(data_.data(), length) << std::endl;// 回显接收到的数据给客户端socket_.async_send_to(asio::buffer(data_, length), sender_endpoint_,[this](const asio::error_code& /*ec*/, std::size_t /*bytes_sent*/) {startReceive();});}asio::ip::udp::socket socket_;asio::ip::udp::endpoint sender_endpoint_;static constexpr std::size_t max_length = 1024;std::array<char, max_length> data_;
};int main() {try {// 创建 io_context 对象,用于管理异步操作asio::io_context io_context;// 创建 UDP 服务器实例,监听端口 12345UdpServer server(io_context, 12345);// 启动事件循环,处理异步操作io_context.run();} catch (const std::exception& e) {// 捕获并输出异常信息std::cerr << "Exception: " << e.what() << std::endl;}return 0;
}

代码解释

UdpServer
  1. 构造函数

    • 接收一个 asio::io_context 对象和一个端口号作为参数。
    • 创建一个 asio::ip::udp::socket 对象,并将其绑定到指定的端口(使用 asio::ip::udp::endpoint)。
    • 调用 startReceive 方法开始异步接收数据。
  2. startReceive 方法

    • 使用 socket_.async_receive_from 异步地从客户端接收数据。该方法接受一个缓冲区(asio::buffer)、一个存储发送方端点信息的 sender_endpoint_ 对象,以及一个回调函数。
    • 当有数据到达时,回调函数会被触发。如果没有错误且接收到的数据长度大于 0,则调用 handleReceive 方法处理数据;否则,继续等待下一次接收。
  3. handleReceive 方法

    • 打印接收到的数据的长度、发送方的 IP 地址和端口号。
    • 使用 socket_.async_send_to 异步地将接收到的数据原样返回给客户端。
    • 在发送完成的回调函数中,如果没有错误,继续调用 startReceive 方法等待下一次接收;如果有错误,则输出错误信息并继续等待。
main 函数
  1. 创建一个 asio::io_context 对象,它是 Asio 库的核心,用于管理异步操作的事件循环。
  2. 创建一个 UdpServer 对象,指定监听的端口为 12345
  3. 调用 io_context.run() 启动事件循环,开始处理异步操作。
  4. 使用 try-catch 块捕获并处理可能抛出的异常。

编译和运行

要编译这个程序,你可以使用以下命令(假设使用 g++ 编译器):

g++ -std=c++17 -o udp_server udp_server.cpp -lpthread

运行程序:

./udp_server

运行服务器后,它会开始监听 12345 端口,等待客户端发送数据。你可以使用网络调试工具或者编写一个 UDP 客户端程序来与这个服务器进行通信测试。

http://www.shuangfujiaoyu.com/news/38124.html

相关文章:

  • jsp页面如何做网站pv统计营销型网站建设公司价格
  • 淘宝做的网站可靠吗自动点击器怎么用
  • b2b网站方案郑州网站关键词优化公司
  • 在阿里巴巴做网站多少钱2019百度指数里的资讯指数是什么
  • 做网站和网站维护需要多少钱谷歌搜索引擎入口2023
  • 国内公司网站需要备案吗全网营销整合营销
  • 网站seo方法baidu优化
  • 自己电脑上做网站seo分析seo诊断
  • 班级网站制作模板湖南seo优化哪家好
  • 宁波网络推广运营公司电话优化器
  • 做的好的网站网球排名即时最新排名
  • 普洱做网站的报价百度seo自动优化
  • 建站专业的推广服务平台现在百度推广有用吗
  • 廊坊网站建设费用营销型网站建设易网拓
  • 网站百度权重怎么提升郑州seo哪家专业
  • zencart网站地图生成郑州网络推广哪家口碑好
  • 做网站主页新网站如何快速收录
  • 云南网站开发哪家靠谱免费发广告网站
  • 美国地接公司怎么在中国网站做推广湘潭网站设计外包公司
  • 建设网站需要先构建好模型三门峡网站seo
  • 湖南新能源公司中企动力网站建设网络顾问
  • 设计师分六个级别seo排名平台
  • 只做域名跳转和关停网站今日新闻国际头条新闻
  • 网站优化软件开发软文营销文章300字
  • 做测试题的网站福州网站开发公司
  • 网站仿造产品软文代写
  • 做ppt好的网站青岛网站设计公司哪家好
  • 学做家常菜的网站 知乎营销策略分析包括哪些内容
  • 企业网站排名提升软件能优化今日国内新闻最新消息大事
  • 网站设计要求有哪些做网站的软件叫什么