1.连接服务器的处理过程
[cpp]viewplaincopy
ARTSPConnection::onConnect(constsp&msg)
interr=::connect(
mSocket,(conststructsockaddr*)&remote,sizeof(remote));
LOGE("%sL%derr=%d",__FUNCTION__,__LINE__,err);
if(err<0){
if(errno==EINPROGRESS){//正在连接中
spmsg=newAMessage(kWhatCompleteConnection,id());
msg->setMessage("reply",reply);
msg->setInt32("connection-id",mConnectionID);
msg->post();
调用---------->
[cpp]viewplaincopy
voidARTSPConnection::onMessageReceived(constsp&msg){
casekWhatCompleteConnection:
onCompleteConnection(msg);
调用---------->
[cpp]viewplaincopy
ARTSPConnection::onCompleteConnection
intres=select(mSocket+1,NULL,&ws,NULL,&tv);
CHECK_GE(res,0);
if(res==0){
//Timedout.Notyetconnected.
LOGE("%sL%d-ECONNABORTED",__FUNCTION__,__LINE__);
msg->post();//循环执行此函数检查是否connected
return;
}
2.是否接收到服务器发送的播放数据的处理
2.1在ARTSPConnection::onCompleteConnection成功连接后,发送检查接收数据的event
[cpp]viewplaincopy
voidARTSPConnection::postReceiveReponseEvent(){
if(mReceiveResponseEventPending){
return;
}
spmsg=newAMessage(kWhatReceiveResponse,id());
msg->post();
mReceiveResponseEventPending=true;
}
调用---------->2.2voidARTSPConnection::onMessageReceived(constsp&msg){
casekWhatReceiveResponse:
onReceiveResponse();
break;
继续调用---------->
2.3
[cpp]viewplaincopy
voidARTSPConnection::onReceiveResponse(){
intres=select(mSocket+1,&rs,NULL,NULL,&tv);
//LOGE("%sL%dselectres=%d",__FUNCTION__,__LINE__,res);
CHECK_GE(res,0);
if(res==1){
MakeSocketBlocking(mSocket,true);
boolsuccess=receiveRTSPReponse();//2.3.1
MakeSocketBlocking(mSocket,false);
LOGE("%sL%dselect====success=%d",__FUNCTION__,__LINE__,success);
if(!success){
//Somethinghorrible,irreparablehashappened.
flushPendingRequests();
LOGE("%sL%dreturn",__FUNCTION__,__LINE__);
return;
}
}
postReceiveReponseEvent();//循环执行此函数
继续调用……
2.3.1boolARTSPConnection::receiveRTSPReponse(){
--->
2.3.1.1boolARTSPConnection::receiveLine(AString*line){
--->
2.3.1.1.1status_tARTSPConnection::receive(void*data,size_tsize){//每次读一个字符
--->
2.3.1.1.1.1ssize_tn=recv(mSocket,(uint8_t*)data+offset,size-offset,0);//从TCP连接的另一端接收数据
--->
2.3.1.2spARTSPConnection::receiveBinaryData()
--->
2.3.1.2.1status_tARTSPConnection::receive(void*data,size_tsize){//每次读3个字符
--->
recv()
2.3.1.2.2status_tARTSPConnection::receive(void*data,size_tsize){//每次读buffer->size()个字符
--->
recv()
--->
2.3.1.3newARTSPResponse
--->
2.3.1.4receiveLine()
--->
2.3.1.5recv()//while(numBytesRead