boost asio序列 UDP 通訊

2021-10-23 06:04:19 字數 2191 閱讀 3504

為了能夠測試,我將原來boost的示例中的埠13更改為60013,因為在13埠為daytime服務的專用埠: 如果強制使用執行時將會導致許可權錯誤(ubuntu16.04)

1. 同步udp 客戶端

#include #include #include using boost::asio::ip::udp;

int main(int argc, char* ar**)

boost::asio::io_context io_context;

// udp::resolver resolver(io_context);

// udp::endpoint receiver_endpoint =

// *resolver.resolve(udp::v4(), ar**[1], "daytime").begin();

// 伺服器ip

udp::endpoint receiver_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 60013);

// 開啟socket

udp::socket socket(io_context);

socket.open(udp::v4());

// 同步傳送資料

boost::arraysend_buf = };

socket.send_to(boost::asio::buffer(send_buf), receiver_endpoint);

// 同步接收資料

boost::arrayrecv_buf;

udp::endpoint sender_endpoint;

size_t len = socket.receive_from(

boost::asio::buffer(recv_buf), sender_endpoint);

std::cout.write(recv_buf.data(), len);

} catch (std::exception& e)

return 0;

}

2. 同步udp 伺服器

#include #include #include #include #include using boost::asio::ip::udp;

std::string make_daytime_string()

int main()

} catch (std::exception& e)

return 0;

}

3. 非同步udp伺服器: 

#include #include #include #include #include #include #include using boost::asio::ip::udp;

std::string make_daytime_string()

class udp_server

private:

void start_receive()

// 非同步接收操作完成時呼叫的handler

void handle_receive(const boost::system::error_code& error,

std::size_t /*bytes_transferred*/)

}// 非同步傳送操作完成時呼叫的handler

void handle_send(boost::shared_ptr/*message*/,

const boost::system::error_code& /*error*/,

std::size_t /*bytes_transferred*/)

udp::socket socket_;

udp::endpoint remote_endpoint_;

boost::arrayrecv_buffer_;

};int main()

catch (std::exception& e)

return 0;

}

注意,檢視列印日誌的順序,以充分理解非同步:先提交傳送/接收請求,當請求正常/非正常完成時,呼叫對應的handler,並且將相應的資訊告訴任務提交者

boost asio使用UDP協議通訊原始碼實現

說明 以下原始碼來自參考文獻 1 比原文更豐富,更有指導意義,方便日後參考.udp servr端原始碼 g g udp server.cpp o udp server lboost system include include include using namespace std using na...

網路基礎篇 socket網路程式設計之UDP通訊

udp和tcp的區別 udp是無連線的 不可靠的資料協議報,而tcp是面向連線的,提供可靠的位元組流。然而,有些情況更適合用udp而不是tcp。有些流行的應用程式就是用udp實現的 dns 網域名稱系統 nfs 網路檔案系統 和snmp 簡單網路管理協議 還有就是qq也是使用的udp。udp和tcp...

使用dgram模組實現基於UDP的資料通訊

server.js檔案 var dgram require dgram createsocket引數用於指定進行udp通訊時使用的協議型別,可指定值為upd4或upd6 var server dgram.createsocket udp4 callback引數msg為乙個buffer物件,存放了接收...