udp的過程比較簡單,當只有一方進行了bind顯示繫結埠,則這一方(假設為a)要先作為接收方接受資訊,因為不知道對方(假設為b)的埠號是多少。而對方作為傳送方進行傳送資料通訊的時候,底層會為它自動隨機分配乙個埠號,然後a方則能從&addr中獲取b的埠,從而能夠緊接著進行傳送資訊。
當然我們也可以對a,b雙方都進行顯示的bind來進行繫結埠。
#include
int sendto(int sockfd, const void* msg, int len, unsigned int flags, struct sockaddr* toaddr, int* addrlen);
引數sockfd為套介面的描述符
msg為指向資料傳送緩衝區的指標
len表示將要傳送的位元組數
flags一般設定為0
toaddr為指向資料傳送的套介面位址資料結構的指標
addrlen指向套介面資料結構的長度
int recvfrom(int sockfd, void* buf, int len, unsigned int flags, struct sockaddr* fromaddr, int* addrlen);
引數buf指向資料接收緩衝區的指標
fromaddr為指向資料接收的套介面位址結構的指標
其他引數和sendto意義相同
就具體函式而言:
用udp協議傳送時,用sendto函式最大能傳送資料的長度為:65535- ip頭(20) – udp頭(8)=65507位元組。用sendto函式傳送資料時,如果傳送資料長度大於該值,則函式會返回錯誤。(丟棄這個包,不進行傳送)
用tcp協議傳送時,由於tcp是資料流協議,因此不存在包大小的限制(暫不考慮緩衝區的大小),這是指在用send函式時,資料長度引數不受限制。而實際上,所指定的這段資料並不一定會一次性傳送出去,如果這段資料比較長,會被分段傳送,如果比較短,可能會等待和下一次資料一起傳送。
記錄一次效能優化
做了這麼久開發,終於涉及到效能優化了 原因是開啟乙個頁面花了2 6秒,被提了bug 不得不說自己有點小白,嘗試了非同步執行緒和把單次的dubbo查詢優化成批量的查詢。但是這兩種嘗試都沒有宣告成功 出了問題首先要找到問題在 既然是耗時,那就要看看到底 耗時最多 這裡要說一下,因為我是改別人的 所以對業...
記錄一次效能優化
前幾天領導扔給我乙個任務讓我對某個業務系統進行效能優化,當前現狀是每秒50併發響應時間就在30s左右,之前沒有接觸過效能優化完全沒有頭緒。領導說公司買了一套dynatrace軟體可以直接用這個軟體進行分析。在測試環境壓測發現情況如下 經統計乙個介面中共列印了80多個debug級別的log,耗時巨大。...
一次效能調優的實戰
專案情況 是乙個大型公司的內部辦公系統,該系統有兩個和一般企業應用不太一樣的特點 一是使用者量非常多,人員數達到2w左右,另乙個是採用分級管理的形式,各個分公司資料分開管理。我們的定位 我們是作為業務平台的提供商參與這個專案的,我們提供底層的開發平台,系統整合商在此基礎上進行二次開發。在專案從開發到...