参考了一些tuxedo资料写一个服务样例程序,代码如下:
|
文件: | TuxedoAPP.rar |
大小: | 3KB |
下载: | 下载 |
|
服务端程序:
#include
#include
#include
#include
#include /* TUXEDO */
#define SRECV 1
#define SSEND 2
#define SDONE 3
#define BUF_SIZE 512
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
AUDITC(TPSVCINFO *rqst)
#else
AUDITC(rqst)
TPSVCINFO *rqst;
#endif
{
long state = SRECV;
long lEvent;
long lLen = 0 ;
char* sBuf = NULL;
char retBuf[BUF_SIZE+1]={0};
int iOff = 0 ;
/*Alloc a buffer*/
//char * tpalloc(char *type, char *subtype, long size)
if( (sBuf=(char*)tpalloc("STRING",NULL,BUF_SIZE+1)) == NULL )
{
(void)userlog("Server alloc buffer failed");
sprintf(sBuf,"%s","Server alloc buffer failed");
//void tpreturn(int rval, long rcode, char *data, long len, long flags)
tpreturn(TPFAIL,0,sBuf,strlen(sBuf),0);
}
for(;;)
{
switch(state)
{
case SRECV :
{
userlog("came in SRECV!");
//int tprecv(int cd, char **data, long *len, long flags, long *revent)
if( tprecv(rqst->cd,&sBuf,&lLen,0,&lEvent) == -1 )
{
if((tperrno == TPEEVENT) && (lEvent == TPEV_SENDONLY))
{
userlog("Server state change from recv to send!");
state = SSEND;
}
else
{
userlog("Server receive failed!");
sprintf(sBuf,"%s","Server receive failed!");
tpreturn(TPFAIL,0,sBuf,strlen(sBuf),0);
}
}
userlog("Receive buf is: %s",sBuf);
strcpy(retBuf+iOff,sBuf);
iOff += (int)strlen(sBuf);
userlog("len:%d\n",iOff);
userlog("After append buf is: %s",retBuf);
}
break;
case SSEND :
{
//int tpsend(int cd, char *data, long len, long flags, long *revent)
userlog("sBuf len:%d\n",strlen(sBuf));
if(strlen(sBuf) >0)
{
userlog("sBuf:%s cleared\n",sBuf);
memset(sBuf,0,strlen(sBuf));
}
userlog("send len:%d\n",strlen(retBuf));
strcpy(sBuf,(const char*)retBuf);
if(tpsend(rqst->cd,sBuf,strlen(sBuf),0,&lEvent) == -1 )
{
userlog("Server tpsend(%d) appended buffer failed,%s",lEvent,tpstrerror(tperrno));
}
else
{
userlog("Server send appended buffer success");
}
/* Ater sending appended buffer,exit.*/
state = SDONE;
}
break;
case SDONE :
{
//void tpfree(char *ptr)
userlog("came in SDONE!");
if(sBuf != NULL)
{
tpfree(sBuf);
}
tpreturn(TPSUCCESS,0,rqst->data,0,0);
state = SRECV;
userlog("Server deal with business done!");
}
break;
default:
userlog("Switch case default!");
break;
}
}
}
客户端程序:
#include
#include
#include
#include
#include /* TUXEDO */
#define SRECV 1
#define SSEND 2
#define SDONE 3
#define BUF_SIZE 512
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
AUDITC(TPSVCINFO *rqst)
#else
AUDITC(rqst)
TPSVCINFO *rqst;
#endif
{
long state = SRECV;
long lEvent;
long lLen = 0 ;
char* sBuf = NULL;
char retBuf[BUF_SIZE+1]={0};
int iOff = 0 ;
/*Alloc a buffer*/
//char * tpalloc(char *type, char *subtype, long size)
if( (sBuf=(char*)tpalloc("STRING",NULL,BUF_SIZE+1)) == NULL )
{
(void)userlog("Server alloc buffer failed");
sprintf(sBuf,"%s","Server alloc buffer failed");
//void tpreturn(int rval, long rcode, char *data, long len, long flags)
tpreturn(TPFAIL,0,sBuf,strlen(sBuf),0);
}
for(;;)
{
switch(state)
{
case SRECV :
{
userlog("came in SRECV!");
//int tprecv(int cd, char **data, long *len, long flags, long *revent)
if( tprecv(rqst->cd,&sBuf,&lLen,0,&lEvent) == -1 )
{
if((tperrno == TPEEVENT) && (lEvent == TPEV_SENDONLY))
{
userlog("Server state change from recv to send!");
state = SSEND;
}
else
{
userlog("Server receive failed!");
sprintf(sBuf,"%s","Server receive failed!");
tpreturn(TPFAIL,0,sBuf,strlen(sBuf),0);
}
}
userlog("Receive buf is: %s",sBuf);
strcpy(retBuf+iOff,sBuf);
iOff += (int)strlen(sBuf);
userlog("len:%d\n",iOff);
userlog("After append buf is: %s",retBuf);
}
break;
case SSEND :
{
//int tpsend(int cd, char *data, long len, long flags, long *revent)
userlog("sBuf len:%d\n",strlen(sBuf));
if(strlen(sBuf) >0)
{
userlog("sBuf:%s cleared\n",sBuf);
memset(sBuf,0,strlen(sBuf));
}
userlog("send len:%d\n",strlen(retBuf));
strcpy(sBuf,(const char*)retBuf);
if(tpsend(rqst->cd,sBuf,strlen(sBuf),0,&lEvent) == -1 )
{
userlog("Server tpsend(%d) appended buffer failed,%s",lEvent,tpstrerror(tperrno));
}
else
{
userlog("Server send appended buffer success");
}
/* Ater sending appended buffer,exit.*/
state = SDONE;
}
break;
case SDONE :
{
//void tpfree(char *ptr)
userlog("came in SDONE!");
if(sBuf != NULL)
{
tpfree(sBuf);
}
tpreturn(TPSUCCESS,0,"",0,0);
state = SRECV;
userlog("Server deal with business done!");
}
break;
default:
userlog("Switch case default!");
break;
}
}
}
阅读(1875) | 评论(0) | 转发(0) |