socket长连接,断线重连案例

void SendMsgToStreamSer(void* pData)
{
//#ifndef WIN32
	signal(SIGPIPE,SIG_IGN);
	VT_WEBSOCKET_SERVICE::CWebSocketVideoMsgProc* pSer = (VT_WEBSOCKET_SERVICE::CWebSocketVideoMsgProc*)pData;
	CSock client;
	while (0>client.Connect("127.0.0.1",9100))
	{
		IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务建立连接失败");
		scSleep(1000);
	}
	IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务建立连接成功");
	unsigned char Header[3];
	int len = sizeof(PushServerMsg);
	Header[0] = '$';
	Header[1] = (unsigned char)((len & 0xFF00) >> 8);
	Header[2] = (unsigned char)(len & 0xFF);
	while(true)
	{
		int retStat = -1;
		PushServerMsg msg;
		if (pSer->m_queue.size()==0)
		{
			scSleep(1000);
			continue;
		}
		scLockWMutex(pSer->m_queueRWMutex);
		msg = pSer->m_queue.front();
		pSer->m_queue.pop();
		scUnlockRWMutex(pSer->m_queueRWMutex);
		retStat = client.Send((char*)&Header,3);
		if (retStat < 0)
		{
			if (client.Connect("127.0.0.1",9100) == 0)
			{
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务重连成功,%d",__LINE__);
				scSleep(100);
				int ret=client.Send((char*)&Header,3);
				if(ret < 0)
				{
					IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","给推流服务重发失败");
				}
			}
			else
			{
				while(0>client.Connect("127.0.0.1",9100))
				{
					IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务连接断开,尝试重连");
					scSleep(1000);
				}
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务重连成功,%d",__LINE__);
				continue;
			}
			
		}
		retStat = client.Send((char*)&msg,len);
		if (retStat< 0)
		{
			if (client.Connect("127.0.0.1",9100) == 0)
			{
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务重连成功,%d",__LINE__);
				scSleep(100);
				int ret=client.Send((char*)&Header,3);
				if(ret < 0)
				{
					IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","给推流服务重发失败");
				}
				ret=client.Send((char*)&msg,len);
				if(ret < 0)
				{
					IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","给推流服务重发失败");
				}
				else
				{
					if(msg.MsgType == MSG_PUSH_RTSP_STREAM||msg.MsgType ==MSG_PUSH_SIP_STREAM)
					{
						syslog_info("VIDEO_SESSION:request push video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
						IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","VIDEO_SESSION:request push video taskId:%s pushServerUrl:%s ReqRtspUrl:%s",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
					}
					else
					{
						syslog_info("VIDEO_SESSION:request stop video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
						IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","VIDEO_SESSION:request stop video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
					}
				}
				
			}
			else
			{
				while(0>client.Connect("127.0.0.1",9100))
				{
					IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务连接断开,尝试重连");
					scSleep(1000);
				}
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","与推流服务重连成功,%d",__LINE__);
				continue;
			}	
		}
		else
		{
			if(msg.MsgType == MSG_PUSH_RTSP_STREAM||msg.MsgType ==MSG_PUSH_SIP_STREAM)
			{
				syslog_info("VIDEO_SESSION:request push video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","VIDEO_SESSION:request push video taskId:%s pushServerUrl:%s ReqRtspUrl:%s",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
			}
			else
			{
				syslog_info("VIDEO_SESSION:request stop video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
				IVE_Logger_AddLog(LOGLEVEL_INFO,"WebSocketVideoMsg.log","SendMsgToStreamSer","VIDEO_SESSION:request stop video taskId:%s pushServerUrl:%s ReqRtspUrl:%s\n",msg.StreamId,msg.pushServerUrl,msg.ReqRtspUrl);
			}
		}	
	}
	client.Close();
//#endif
	return ;
}
欢迎关注问我团队公众号:

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值