⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip.cpp

📁 短信防伪系统服务器端
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                                strcpy(reportSMS.srcTermid,m_szSeverNumber);
                                strcpy(reportSMS.destTermid,pReport->sUserNumber);
                                itoa(pReport->cState,reportSMS.state, 7);
                                reportSMS.errorCode=pReport->cErrorCode;
                                sprintf(deliverSMS.smgMsgId,"%0X%0X", ntohl(pReport->seqid.nSeq2), ntohl(pReport->seqid.nSeq3));
                                OnMTReportSMS(&reportSMS);
                            }
                        }
                    }
                }
            }
        }
    }
    for(int j=0;j<eventTotal;j++)
	{
		closesocket(accept_socks[j]);
		CloseHandle(accept_events[j]);
    }
}

int  CSgip::Listen() //启动监听端口
{
	int ret=0;
    sockaddr_in sockaddr;
	sockaddr.sin_family=AF_INET;
	sockaddr.sin_addr.S_un.S_addr=INADDR_ANY;
	sockaddr.sin_port=htons(m_listenport);
	m_socklisten=socket(AF_INET,SOCK_STREAM,0);
	if(m_socklisten==INVALID_SOCKET)
    {
		return WSAGetLastError() ;
    }
	ret=bind(m_socklisten,(LPSOCKADDR)&sockaddr,sizeof(sockaddr));
	if(ret==SOCKET_ERROR)
	{
 		return WSAGetLastError() ;
	}
	ret=listen(m_socklisten,WSA_MAXIMUM_WAIT_EVENTS-1);
	return ret;
}

void CSgip::OnRecv()
{ 
	int	ret,len,cmdid=0;
	FD_SET	fdset;
	TIMEVAL	timeout;
	timeout.tv_sec = 1;
	timeout.tv_usec= 0;    
    SGIP_HEAD          head; 
    char               recvbuff[64];
    char               szMsgId[24];
    SGIP_SUBMIT_RESP  *pSubmitResp=0;
	while(!m_bQuit)
	{
        FD_ZERO( &fdset);
        FD_SET(m_Socket, &fdset);
		ret = select(0,&fdset,NULL,NULL,&timeout);
		if( ret == SOCKET_ERROR)
        {
		     OnSocketError();
             continue;
        }
		if( ret == 0)
        {
            continue; 
        }
        ret =::recv( m_Socket ,(char*)&head, sizeof( SGIP_HEAD ) ,0); 
		if( ret != sizeof( SGIP_HEAD))
        {
            if(ret==0||ret== SOCKET_ERROR)
            {
                OnSocketError();
            }
			continue;
        }
		len= ntohl(head.size ) - sizeof( SGIP_HEAD );
        ret =::recv(m_Socket, recvbuff, len ,0 );
		if( ret != len )
        {  
            if(ret==0||ret==SOCKET_ERROR)
            {
                OnSocketError();
            }
			continue;
        }
		int cmdid=ntohl(head.cmdid);
        switch(cmdid)
        {
            case nSGIP_SUBMIT_RESP: 
                pSubmitResp= (SGIP_SUBMIT_RESP *)recvbuff;
                sprintf(szMsgId,"%0X%0X", ntohl(head.seqid.nSeq2), ntohl(head.seqid.nSeq3));
                OnSubmitResp(ntohl(head.seqid.nSeq3),pSubmitResp->cResult,szMsgId);  
			    break;
		    case nSGIP_BIND_RESP:
                break;
            default:
			    break;
        }
    }
}
int CSgip:: SubmitSMS(SUBMIT_SMS *p ,int len,int seqid)
{
    char sztimetamp[12];
    ((SGIP_HEAD * )(p->pkg))->cmdid = htonl(nSGIP_SUBMIT);
    ((SGIP_HEAD * )(p->pkg))->size  = htonl( len );
    ((SGIP_HEAD * )(p->pkg))->seqid.nSeq1 = htonl(atol(m_szSpNode));
    ((SGIP_HEAD * )(p->pkg))->seqid.nSeq2 = htonl(atol(GetTimeStamp(sztimetamp))); 
    ((SGIP_HEAD * )(p->pkg))->seqid.nSeq3 = htonl( seqid );
    return Send(p->pkg,len);
}

void CSgip::OnSocketError()
{
    int ret;
    EnterCriticalSection( &m_csSocket);
    ret=Connect();
    if(ret==0)
    {
        SGIP_HEAD head;
        SGIP_BIND bind;
        memset(&bind,0,sizeof( SGIP_HEAD));
        char sztimetamp[12];
        head.cmdid=htonl(nSGIP_BIND);
        head.size=htonl(sizeof( SGIP_HEAD) + sizeof(SGIP_BIND));
        bind.cLoginType=1;
        strcpy(bind.sLoginName,m_szUser);
        strcpy(bind.sLoginPwd,m_szPwd);
        head.seqid.nSeq1=htonl(atol(m_szSpNode));
        head.seqid.nSeq2=htonl(atol(GetTimeStamp(sztimetamp)));
        head.seqid.nSeq3=htonl(GetSeqid(0));
        ret=::send(m_Socket,(char *)&head, sizeof( SGIP_HEAD),0 );
        if(ret==sizeof( SGIP_HEAD))
        {
            ret=::send(m_Socket,(char *)&bind,  sizeof(SGIP_BIND),0 );
        }
    }
    LeaveCriticalSection( &m_csSocket);
}
int  CSgip::Login()
{
    SGIP_HEAD head;
    SGIP_BIND bind;
    memset(&bind,0,sizeof( SGIP_HEAD));
    char sztimetamp[12];
    head.cmdid=htonl(nSGIP_BIND);
    head.size=htonl(sizeof( SGIP_HEAD) + sizeof(SGIP_BIND));
    bind.cLoginType=1;
    strcpy(bind.sLoginName,m_szUser);
    strcpy(bind.sLoginPwd,m_szPwd);
    head.seqid.nSeq1=htonl(atol(m_szSpNode));
    head.seqid.nSeq2=htonl(atol(GetTimeStamp(sztimetamp)));
    head.seqid.nSeq3=htonl(GetSeqid(0));
    int ret=::send(m_Socket,(char *)&head, sizeof( SGIP_HEAD),0 );
    if(ret==sizeof( SGIP_HEAD))
    {
        ret=::send(m_Socket,(char *)&bind,  sizeof(SGIP_BIND),0 );
        if(ret==sizeof(SGIP_BIND))
        {
            char szbuff[sizeof( SGIP_HEAD)+sizeof(SGIP_BIND_RESP)]={0};
            int  nsize= sizeof( SGIP_HEAD)+sizeof(SGIP_BIND_RESP);
            ret=recv(m_Socket,szbuff,nsize,0);
            if(ret==nsize)
            {
                return ((SGIP_BIND_RESP *)(szbuff + sizeof( SGIP_HEAD)))->cResult;
            }
            else
            {
                return WSAGetLastError();
            }
        }
        else
        {
            return WSAGetLastError();
        }
    }
    return WSAGetLastError();
}
int  CSgip::Logout()
{
    SGIP_HEAD head;
    char sztimetamp[12];
    head.size=htonl(sizeof(SGIP_HEAD));
    head.cmdid=htonl(nSGIP_UNBIND);
    head.seqid.nSeq1=htonl(atol(m_szSpNode));
    head.seqid.nSeq2=htonl(atol(GetTimeStamp(sztimetamp)));
    head.seqid.nSeq3=htonl(GetSeqid(0));
    int ret=Send((char *)&head,sizeof(SGIP_HEAD));
    return 0;
}
int CSgip::Startup(char *szIp,int port, int listenport, int login_mode,
            char *szUser,char *szPwd,
            char *szCorpId, char *szSeverNumber,char *szSpNode,
            int  threadpool,int wndsize,
            int  timeout,int trys,
            void (*OnDeliverSMS)(DELIVER_SMS   *pDeliver),
            void (*OnMTReportSMS)(MTREPORT_SMS *pReport),
            void (*OnSubmitedSMS)(SUBMIT_SMS   *pSubmited))
{
    m_OnDeliverSMS=OnDeliverSMS;
    m_OnMTReportSMS=OnMTReportSMS;
    m_OnSubmitedSMS=OnSubmitedSMS;
    m_listenport= listenport;
    m_nLoginMode=login_mode;
    strcpy(m_szIp, szIp);
    m_nPort=port ;
    strcpy(m_szUser,szUser) ;
    strcpy(m_szPwd,szPwd) ;
    if(szCorpId)      strcpy(m_szCorpId, szCorpId);
    if(szSeverNumber) strcpy(m_szSeverNumber,szSeverNumber);
    if(szSpNode)      strcpy(m_szSpNode,szSpNode);
    int ret=Connect();
    if(ret==0)
    {
        ret=Login();
    }
    if(login_mode==1||login_mode==2)//接收或者收发模式
    {
        Listen();
        m_hListenThread=::CreateThread(0,0,ListenThreadProc,this,0,0);
    }
    Initialize(threadpool,wndsize,timeout,trys);
    return ret;
}
int CSgip::Cleanup()
{
    Logout();
    Close();
    return 0;

}
void CSgip::OnActive()
{
    while(!m_bQuit)
    {
        Sleep(1000);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -