首先,如果是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的现有字符串算法实现。
今天的文章GB28181协议TCP粘包分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29773.html