#include #include #include namespace asio = boost::asio; class UdpSendTest { public: UdpSendTest(asio::io_service& io_service, const std::string& dest_ip, int dest_port, int packet_size, int packet_count, int interval) : io_service_(io_service), timer_(io_service), udp_socket_(io_service), dest_ip_(std::move(dest_ip)), dest_port_(dest_port), packet_size_(packet_size), packet_count_(packet_count), period_(interval) { } void start() { timer_.expires_from_now(period_); timer_.async_wait(std::bind(&UdpSendTest::handleTimer, this, std::placeholders::_1)); try { udp_socket_.connect(asio::ip::udp::endpoint(boost::asio::ip::address::from_string(dest_ip_), dest_port_)); } catch(boost::system::system_error e) { std::cerr<< "Could not connect:"< buffer(packet_size_,0); for (int i=0; i 1) { buffer[0] = i / 255; buffer[1] = i % 255; } else buffer[0]=i%255; auto t0 = std::chrono::steady_clock::now(); try { udp_socket_.send(asio::buffer(buffer)); } catch(boost::system::system_error& error) { std::cerr<<"Could not send UDP packet, reason: "<(delta_t).count(); if (delta_t_us > 10000) { std::cout<<"Sending UDP packet took >10ms: "< period_.count() * 1000) { std::cout<<"This would lead to a lost frame!"<h_addrtype; memcpy((char*)&server_addr_.sin_addr.s_addr, h->h_addr_list[0], h->h_length); server_addr_.sin_port = htons(dest_port_); client_addr_.sin_family = AF_INET; client_addr_.sin_addr.s_addr = htonl(INADDR_ANY); client_addr_.sin_port = htons(0); auto rc = bind(socket_fd_,reinterpret_cast(&client_addr_), sizeof(client_addr_)); if (rc < 0) std::cerr<<"Could not open Port"< buffer(packet_size_,0); for (int i=0; i 1) { buffer[0] = i / 255; buffer[1] = i % 255; } else buffer[0]=i%255; auto t0 = std::chrono::steady_clock::now(); auto rc = sendto(socket_fd_, buffer.data(), buffer.size(), 0, (sockaddr* )&server_addr_, sizeof(server_addr_)); if (rc<0) std::cerr<<"Could not send UDP packet"<(delta_t).count(); if (delta_t_us > 10000) { std::cout<<"Sending UDP packet took >10ms: "< period_.count() * 1000) { std::cout<<"This would lead to a lost frame!"< 0 bytes!"< 1000 * 1000 * 100) std::cerr<<"Warning: trying to transmit > 100Mb/s"<