UDP包結構


 

UDP包結構

 // 參考: http://www.2cto.com/net/201307/224715.html

UDP數據包由首部和數據組成,每行4個字節(32位),首部固定長度為8個字節(2行)
 
2、首部
1、  第一行:源端口16位,目的端口16位
表示發送方和接收方的端口號
 
2、  第二行:UDP包長度16位,UDP校驗和16位
 
UDP包長度:
        包括UDP首部在內的以字節為單位的UDP數據報總長度;
校驗和:
        【待補充算法】
3、數據
IP首部結束之后的部分
編程應用:

//參考: UDP數據包大小和結構  http://blog.csdn.net/nokiaxjw/article/details/8094605

//參考: UDP數據包大小問題 http://blog.csdn.net/buptzwp/article/details/5055487

你用UDP發一包就是一包.要么收到,要么收不到一個完整的包.不能超過路由長度.一個數據包=包頭+數據
包頭包含了一些基本信息,如包類型是命令還是數據,包總數,當前包編號等等。如果你想知道該讀取多少信息,在包頭中保存后面數據部分的長度,同時包頭寫成一個定長結構體,你讀取一個包的時候,先把讀取定長的包頭信息,再根據包頭里面的長度len信息來讀取len字節的數據,就是后面的數據部分的長度。
如果你包的設計是不定長的,包頭應該是一個共用結構體,讀取時,分兩步,
struct Header
{
     char msg_type; //包類型  命令或者數據
     int  total;    //總包數
     int  curr;     //當前包數
     int  len;      //數據部分的長度
};
1、recv(socket,buf,sizeof(struct Header)); //讀取包頭,已獲取基本控制信息
    struct Header h;
    memcpy(&h,buf,sizeof(h));

2、recv(socket,buf,h.len); //讀取數據部分

    if ( h.msg_type == XX )
    {
    }
    else
    {
    }  
你用UDP發一包就是一包.要么收到,要么收不到一個完整的包.不能超過路由長度.如果你要分很多小包一個UDP一個的發.你得自己定義協議.序列號+長度+內容+是否有后序標志 +檢驗證。

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM