int SendBYE(char *num, char *tag1, char *tag2) { printf("\n\t=================================================================================\n\t"); printf("\n\t===== Enter Method of Send ACK To Camera =====\n\t"); printf("\n\t=================================================================================\n\t"); int sockbye = socket(AF_INET, SOCK_DGRAM, 0); if (sockbye < 0) { printf("socket built failt!"); return -1; } struct sockaddr_in camera_bye; camera_bye.sin_family = AF_INET;//地址族 camera_bye.sin_port = htons(5060);//端口 camera_bye.sin_addr.s_addr = inet_addr("192.168.1.250"); //unsigned int ack_len = sizeof(camera_ack); bind(sockbye, (sockaddr*)&camera_bye, sizeof(camera_bye)); char sendBuf[2500]; memset(sendBuf, 0, 2500); int zishu; zishu = snprintf(sendBuf, sizeof(sendBuf), "BYE sip:%s@192.168.1.250:5060 SIP/2.0\r\n" "Via: SIP/2.0/UDP 192.168.1.200:5080;branch=z9hG4bK776asdhds;rport\r\n" "Max-Forwards: 70\r\n" "From: <sip:170010000000000001@192.168.1.200:5080>;tag=1234567890\r\n" "To: <sip:%s@192.168.1.250:5060>;tag=12345678\r\n" "Call-ID: %s\r\n" "CSeq: 21 BYE\r\n" "Content-Length: 0\r\n" "Contact: <sip:170010000000000001@192.168.1.200:5080>\r\n" "\r\n", Host_ID, Host_ID, CALLID_NAME ); printf("zishu=%d\n", zishu); printf("sendBuf=%s\n", sendBuf); int bytes = sendto(sockbye, sendBuf, sizeof(sendBuf), 0, (sockaddr*)&camera_bye, sizeof(camera_bye)); printf("bytes=%d\n", bytes); // 关闭socket close(sockbye); return 0; }写了一个向网络摄像机发送BYE的函数,发送过去后,网络摄像机回复481 Call leg/Transaction does not exist,这是什么问题
时间: 2023-09-01 18:06:50 浏览: 139
浅析char 指针变量char *=p 这个语句的输出问题
5星 · 资源好评率100%
这个问题可能是由于网络摄像机认为当前的会话不存在,因此无法处理BYE消息。可能的原因包括:
1. 在发送BYE消息之前,没有正确地完成之前的会话,或者没有正确地发送ACK消息。
2. 发送的BYE消息的Call-ID与之前的会话不匹配。
3. 网络摄像机在会话过程中出现了错误或异常,导致无法正确处理BYE消息。
你可以根据这些可能的原因进行排查和调试,以找出问题的具体原因。
阅读全文