為了能夠測試,我將原來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物件,存放了接收...