GB28181協議TCP粘包

首先,如果是SIP協議服務端的話,不建議使用eXosip庫,性能太差了。建議基於osipparser2實現SIP協議解析,自己實現TCP和UDP通信。對於TCP通信來說,一個完整SIP消息可能是分多次異步接收的,需要自己實現粘包。因爲osipparser2解析SIP協議是必須輸入一個完整的SIP消息。

SIP協議的格式主要有兩種表現形式:僅有SIP消息頭(SDP消息長度爲0),SIP消息頭+SDP消息體

SIP協議無SDP的SIP消息格式:

SIP協議有SDP的SIP消息格式:

粘包的關鍵就在於SIP頭尾部的CRLF(\r\n\r\n),然後就是通過"Content-Length:"得到SDP的長度。

注意,字符轉數字時要兼容的是數字前的空格。

另外,在斷包之前,需要將字符串左側的\r、\n和空格清理掉,可以基於boost和std的現有字符串算法實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章