📄 sgip.cpp
字号:
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 + -