基于联通SGIP协议的短信接收问题?
leiqp 2004-09-23 05:34:02 使用厂商提供的api进行短信接收,厂商提供的是C++源码(该源码运行正常),现在需要转换成Delphi源码,请问该如何转换?100分双手奉上。
C++源码如下:
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
int res ;
void *p_MO=NULL;
int listenfd,connfd;
struct sockaddr_in servaddr;
char buf[1024];
struct MO_msg *p_msg=NULL;
struct MO_report *p_report=NULL;
listenfd=socket(AF_INET,SOCK_STREAM,0);
if(listenfd<0){
sprintf(buf,"socket create error,%s",strerror(errno));
MessageBox(buf,"error",MB_OK);
return;
}
memset(&servaddr,0,sizeof(struct sockaddr_in));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(54338);
if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr_in))<0)
{
sprintf(buf,"socket bind error,%s",strerror(errno));
MessageBox(buf,"error",MB_OK);
return;
}
if(listen(listenfd,5)<0)
{
sprintf(buf,"socket listen error,%s",strerror(errno));
MessageBox(buf,"error",MB_OK);
return;
}
connfd=accept(listenfd,NULL,NULL);
if(connfd<0)
{
sprintf(buf,"socket accept error,%s",strerror(errno));
MessageBox(buf,"error",MB_OK);
return;
}
while(1)
{
res=SGIP_Get_MO(connfd,&p_MO);
if(res==ERROR_SOCKET_CLOSE)
{
sprintf(buf,"connection clsed by gateway\n");
MessageBox(buf,"error",MB_OK);
break;
}
if(res<0){
sprintf(buf,"get mo error = %d\n",res);
MessageBox(buf,"error",MB_OK);
break;
}
else if(res==MO_MSG)
{
//printf("get mo msg:");
p_msg=(struct MO_msg *)(p_MO);
p_msg->msg[p_msg->msgLen]=0;
sprintf(buf,"spnum:%s sourceUser:%s,msgFormat:%d msgLen:%lu\n",
p_msg->SPNumber,p_msg->sourceUser,p_msg->msgFormat,p_msg->msgLen);
MessageBox(buf,"MO MSG",MB_OK);
sprintf(buf,"msg=%s\n",p_msg->msg);
MessageBox(buf,"MO MSG",MB_OK);
}
else if(res==MO_REPORT)
{
//printf("get mo report: ");
p_report=(struct MO_report *)(p_MO);
sprintf(buf,"mobile:%s \n",p_report->mobile);
MessageBox(buf,"MO REPORT",MB_OK);
sprintf(buf,"seq:%lu %lu %lu state:%d errcode:%d\n",
p_report->seq1,p_report->seq2,p_report->seq3,p_report->state,p_report->errCode);
MessageBox(buf,"MO REPORT",MB_OK);
}
//break;
}
closesocket(connfd);
closesocket(listenfd);
}
其中使用到的头文件包括如下信息:
struct MO_msg{
char sourceUser[21]; //发送消息的手机
char SPNumber[21]; //SP接入号
unsigned char tp_pid;
unsigned char tp_udhi;
unsigned char msgFormat; //消息格式
unsigned long msgLen; //消息长度
char msg[160]; //消息内容
};
struct MO_report{
unsigned long seq1; //相应的submit序列号1-3
unsigned long seq2;
unsigned long seq3;
unsigned char report_type;
char mobile[21]; //目的手机号
unsigned char state; //状态 0:发送成功 1:等待发送 2:发送失败
unsigned char errCode; //错误代码
};
#define MO_MSG 1
#define MO_REPORT 2
SGIPAPI_API int SGIP_Get_MO(int conn_id,void **pp_MO);