[問題] 如何在socket傳輸資料中控制流量?

作者: r596twy (湯姆熊)   2015-07-10 08:36:40
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Visual Studio 2013
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
winsock2.h
Ws2_32.lib
問題(Question):
寫了一個由server傳送資料和client接收資料的socket程式
因為主要用途是要用在影音串流
所以是採用UDP
而我想控制並限定server每秒傳送給client端的流量
但不清楚該如何作...
補充說明(Supplement):
因為傳送的資料是二進位格式
所以目前傳送與接收檔案的方式,分別是用傳訊息的方式
用sendto和recvfrom來達成
目前沒有限定流量的情況下
每秒約可達到160Mbps
原本想透過Sleep來達到控制每秒可傳送資訊的流量效果
但是當我試圖用Sleep(1),也就是每1ms控制server傳送一次資料時
每秒流量卻下降至約200Kbps...
實在超出自己預計希望下降至的流量太多
所以想請問各位大大在實作控制server傳輸流量的經驗與手法
望各位大大能幫我解惑了
感恩~~<(_ _)>
作者: LiloHuang (十年一刻)   2015-07-10 09:34:00
Sleep(1) 的精度只到 millisecond,可用 select 來模擬精度達到 us。可用 std::this_thread::sleep_for(std::chrono::microseconds(usec)); 或用 boost 版本比較取巧但不好的做法就是用 busy loop 來 sleep

Links booklink

Contact Us: admin [ a t ] ucptt.com