關於UDP使用的幾點探究

對於UDP的使用,之前一直存有疑問,今天藉助NAT實驗的機會將其探究一番,終有收穫。
其一、在默認情況下,recfrom函數是阻塞方式,之前之所出現不穩定的情況是因爲在執行該函數的時候出現Error,而這個Error的情況則是有很多種情況,如地址綁定錯誤、端口錯誤,最爲容易忽視的錯誤則是參數錯誤,該函數的最後一個參數是以指針的形式存在,而這個參數既是輸入也是輸出,正式這個輸入容易使人忽視而導致出現不可理解的莫名其妙的錯誤,這個參數的值的設置經測試,只有滿足大於等於sizeof(SOCKADDR_IN)即可正常工作。
其二、對於inet_addr函數,執行完該函數之後,返回值已經是滿足網絡字節順序的要求,無需在使用htonl函數,而這裏有個與之相反的函數inet_ntoa,實現從二進制形式到字符串形式的轉換。
其三、對於UDP通信而言,完全可以實現自發自收的效果,前提是端口號和IP地址必須一致,而這點在TCP中將導致端口衝突,是不可實現的。
其四、本機如果地址綁定的是INADDR_ANY的話,在接收端出現的源端地址可能是127.0.0.1。
其五、對於UDP傳輸,如果使用本地迴環地址(127.0.0.1)調試運行時,容易出現錯誤代碼爲10054的錯誤,此時應當先運行充當服務器功能的程序。
其六、對於網絡編程的調試,在無法準確定位bug的情況下,一個比較好的做法就是輸出每個數據包。
發佈了22 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章