您的位置:首页 > 理论基础 > 计算机网络

live555 接收客户端连接及rtsp交互---网络连接处理及RTSP连接模块 .

2012-05-14 17:10 423 查看
[cpp]
view plaincopyprint?

1 套接字创建,绑定,监听
主函数main()启动以后,会调用
(DynamicRTSPServer::createNew—> RTSPServer::setUpOurSocket setupStreamSocket)
在setupStreamSocket中实现TCP中S端套接字的创建,绑定,监听,设置非阻塞模式操作,其监听端口是854.
在套接字相关操作执行完成以后会执行 new DynamicRTSPServer(派生自RTSPServer),因此也会调用RTSPServer::RTSPServer并在其中中执行env.taskScheduler().turnOnBackgroundReadHandling(fServerSocket,
(TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandler, this)
注:其中这个env就是在main()函数中调用BasicUsageEnvironment::createNew生成的。
第一个函数参数fServerSocket是服务器监听套接字。
第二个参数是函数RTSPServer::incomingConnectionHandler地址指针。
在BasicTaskScheduler::turnOnBackgroundReadHandling中会将fServerSocket存储到
HandlerSet* (HandlerSet* BasicTaskScheduler::fReadHandlers)结构中。
同时将监听套接字 放到fReadSet中,在下面的select机制中用的到。
将第二个参数
对应handler->handlerProc。
2 准备接受连接
执行代码:env->taskScheduler().doEventLoop();
这个env和 1中env是同一个。
调用:BasicTaskScheduler0::doEventLoop—> BasicTaskScheduler0::doEventLoop
在doEventLoop无限循环执行select等待客户端连接。
执行代码:int selectResult = select(fMaxNumSockets, &readSet, NULL, NULL,
&tv_timeToDelay)
其中监听套接字已经放到readset中。
如果检测到客户端连接执行:
(*handler->handlerProc)(handler->clientData, SOCKET_READABLE);
即RTSPServer:: incomingConnectionHandler。
在此函数中 accept()客户端连接,创建RTSPClientSession*
注:在RTSPClientSession其实封装了RTSP功能。
3 接收客户端连接完成 进行RTSP交互
通过在RTSPClientSession::RTSPClientSession执行
envir().taskScheduler().turnOnBackgroundReadHandling(fClientSocket,
(TaskScheduler::BackgroundHandlerProc*)&incomingRequestHandler, this)
参数1:accept()生成的客户端套接字
参数2:客户端信息接收处理函数地址指针
其后在singlestep函数中除了监听新客户端连接外还要等待接收已经连接客户端发送过来的信息。还是通过
(*handler->handlerProc)(handler->clientData, SOCKET_READABLE);
调用incomingRequestHandler来完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐