init:
#include "lrs.h"
#define PROTOVER 351
enum RET_ERROR{ SUCCESS=0, ERROR, WHILE};enum errorCode{ ERROR_NULL=0, ERROR_NO_SIZE, ERROR_BUFFER_POINT, ERROR_POINT, ERROR_ALLOC_MEM, ERROR_WRITE_OVERFLOW, ERROR_READ_OVERFLOW, ERROR_NO_MOVE, ERROR_ADDRESS_OVERFLOW, ERROR_PREPLACE_POINT, ERROR_OT_OVERFLOW, ERROR_OVERFLOW, ERROR_PACKETSIZE_OVERFLOW, ERROR_NO_FOUND, ERROR_NO_COUNT,};typedef struct PackageHead{ DWORD iProtoVer; DWORD iPackageType;}Head;//功能函数typedef struct _StreamWRBuffer { char* cBuf; unsigned int iBufSize; unsigned int iWPos; unsigned int iRPos; }SWRBUFFER,*PSWRBUFFER;typedef struct ConnectPackageData { DWORD iConnectionID;//连接请求时为0,返回一个连接号,由服务器管理 DWORD ClientTaskID;//客户端任务编号 char RobotName[64]; char RobotPWD[64];}Connect;typedef struct SectionRequestPackageData
{ DWORD iConnectionID; DWORD ClientTaskID;//客户端任务编号 DWORD iSectionID;//0,返回一个会话ID,由服务器管理 char UserIDX[64]; char UserMAC[64]; char RoomID[64];}SRP; typedef struct QAPackageData { DWORD iConnectionID;//每个机器人分配一个id,标记该机器人帐号的一个连接,机器人与平台对应 DWORD ClientInquireID;//当同一台客户机运行多个客户动态库的时候标记每个查询的ID DWORD QuestionID; DWORD iSectionID; DWORD iInquireType;//查询包类型}QD; typedef struct DisconnectPackageData { DWORD iConnectionID;//连接请求时为0,返回一个连接号,由服务器管理 DWORD ClientTaskID;//客户端任务编号}DP; typedef struct SectionEndPackageData { DWORD iConnectionID; DWORD iSectionID;//非0连接ID DWORD iClientTaskID;}SEP;//创建socket
void Create_socket() { int ret=0; int errorcount=0; while(1) { ret=lrs_create_socket("socket0", "TCP","RemoteHost=192.168.0.53:10010", LrsLastArg); if(ret) { switch(ret) { case LRS_CREATE_SOCK_FAILED: case LRS_RECV_MISMATCH: errorcount++; if(errorcount>3){ lr_error_message("创建失败, 返回错误码为:%d",ret); lr_abort (); return; } continue; default: lr_error_message("创建socket失败,错误码=%d",ret); lr_abort (); return; } } break; }//end while }/*//字符串写入有长度的DWORD writeToBufferStringL(PSWRBUFFER buffer,char*str,unsigned int ssize) { if(!buffer||!(buffer->cBuf)) { return ERROR_POINT; } if((buffer->iWPos+ssize)>=(buffer->iBufSize)) { return ERROR_WRITE_OVERFLOW; } memcpy(buffer->cBuf+buffer->iWPos,str,ssize); buffer->iWPos+=ssize; return ERROR_NULL; } *///接收 DWORD RecvBuf(char* cRecvBuf,char* cSocketName,char* cBufName){ int ret=0; char * cRecvdata=0; int iRecvdatalen=0; DWORD begin=0,cur=0; begin=clock(); while(1) { ret=lrs_receive(cSocketName,cBufName,LrsLastArg); switch(ret) { case 0: case LRS_RECV_MISMATCH : ret=lrs_get_last_received_buffer(cSocketName,&cRecvdata,&iRecvdatalen); if(ret) { lr_error_message("last_recv获取接收缓冲区出错,错误码:%d",ret); lrs_free_buffer(cRecvdata); return ERROR; } if(iRecvdatalen) { memcpy(cRecvBuf,cRecvdata,iRecvdatalen); lrs_free_buffer(cRecvdata); return SUCCESS; } cur=clock(); if((cur-begin)>=10000) { lr_error_message ("接收超时,接收等待时间=%d毫秒",cur-begin); return ERROR; } continue; default: lr_error_message ("recv接收数据出错,错误码:%d",ret); return ERROR; }//end switch }//end while return SUCCESS;}Head * pHead=0;
Connect * pConnect=0;char cSendBuf[4096];char cRecvBuf[4096];//PSWRBUFFER recvBuf=0;
vuser_init(){ int ret=0; lrs_set_recv_timeout(100,0); lrs_set_recv_timeout2(0,10); lrs_startup(257); //创建socket Create_socket(); return 0; }
action:
#include "lrs.h"
Action(){ //封包 int ret=0; pHead=(Head *)cSendBuf; pHead->iProtoVer=PROTOVER; pHead->iPackageType=12;pConnect=(Connect *)(cSendBuf+sizeof(Head));
//pConnect->iConnectionID=; //pConnect->ClientTaskID=; sprintf(pConnect->RobotName,"paopaoba"); sprintf(pConnect->RobotPWD,"paopaoba"); ret=lrs_save_param_ex("socket0","user",cSendBuf,0,sizeof(Head)+sizeof(Connect),"ebcdic","Connect"); lr_start_transaction("send");ret=lrs_send("socket0","buf1",LrsLastArg);
if(ret) { lr_error_message("send ERROR!ret=%d",ret);}
lr_end_transaction("send", LR_AUTO);
lr_error_message("send succes");
//lrs_receive("socket0","buf10",LrsLastArg); //lr_error_message("get return %s",buf10); //char* recbuf; ret=RecvBuf(cRecvBuf,"socket0","buf10"); lr_error_message("get string :%s",cRecvBuf); pHead=(Head *)cRecvBuf; lr_error_message("get string :%d",pHead->iPackageType); //解析cRecvBuf pConnect=(Connect *)(cSendBuf+sizeof(Head)); lr_error_message("get string :%s",pConnect->RobotPWD); return 0;}data:
;WSRData 2 1
send buf1 "<Connect>" recv buf10 12-1