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

📄 communicate.cpp

📁 一个与银行通讯的测试程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		
		// 取第2列: 管理员密码
		memset(szBuff, 0x00, sizeof(szBuff));
		dbf.GetField(2, szBuff, 50);
		//m_strTool.alltrim(szBuff);
		memset(passwddbf,0x00,sizeof(passwddbf));
        strcpy(passwddbf, szBuff);
		
		//校验
		if((memcmp(admin, admindbf,6) == 0) 
			&& (memcmp(passwd, passwddbf, 6) == 0))
			{

	      	dbf.DeleteRecord((long)i);
			dbf.Zap();
			memcpy(packstruct->m_Fhdm,"0000",sizeof(packstruct->m_Fhdm));
		    memset(packstruct->m_Data,0x00,sizeof(packstruct->m_Data));
			strcpy(packstruct->m_Data, "删除成功");
			iLen = strlen(packstruct->m_Data);
			packstruct->m_Data[iLen] = 0x01;

			memset(tmpStr,0x00,sizeof(tmpStr));
		   memset(packstruct->m_DataLen,0x00,sizeof(packstruct->m_DataLen));
		   iLen = strlen(packstruct->m_Data);
		   sprintf(tmpStr, "%04d", iLen);
		   memcpy(packstruct->m_DataLen, tmpStr, 4);

		    dbf.Close();
			return i; //update by zhangl
			}
		}

            memcpy(packstruct->m_Fhdm,"0001",sizeof(packstruct->m_Fhdm));
		    memset(packstruct->m_Data,0x00,sizeof(packstruct->m_Data));
			strcpy(packstruct->m_Data, "没有该记录");
			iLen =strlen(packstruct->m_Data);
			packstruct->m_Data[iLen] = 0x01;

			memset(tmpStr,0x00,sizeof(tmpStr));
		   memset(packstruct->m_DataLen,0x00,sizeof(packstruct->m_DataLen));
		   iLen = strlen(packstruct->m_Data);
		   sprintf(tmpStr, "%04d", iLen);
		   memcpy(packstruct->m_DataLen, tmpStr, 4);
		   dbf.Close();
		return -3;
	}

	//ExchangeSendData返回包长度


	memset(SendReqPack,0,sizeof(SendReqPack));

	iRet = package.ExchangeSendData(packstruct, SendReqPack, cHoldmem);
	WriteParseLog(__FILE__,__LINE__,"log[%s] [%d]",SendReqPack,iRet);
		
	iRet = package.ExchangeRecvData(packstruct,cRecv, cHoldmem);
		
		if((packstruct->m_Blx[0] == '1')&&(memcmp(packstruct->m_Fhdm,"0000",4)==0))
		{
			WriteParseLog(__FILE__,__LINE__,"%s  [包类型]=[1]","接收到数据包,!! ");
			//TODO: add needed code here,
			//Change some items and send to the host again!
			//
//			char tempStr[80];
			char PackbEndFlag[10];
			//add zhangli 20050724  !!!
			char tempjydm[9];

			memset(tempjydm,0x00,sizeof(tempjydm));
			memcpy(tempjydm,packstruct->m_Jydm,sizeof(packstruct->m_Jydm));
			
			if(IsFirst)
			{
		//		WriteParseLog(__FILE__,__LINE__,"创建DBF [%s]文件",dbffile);
				package.CreateDbfFile(tempjydm, dbffile, dbf);
			}
			//GetCurrentDirectory(80,tempStr);
			sprintf( DbfFileName, "..\\dbf\\%s",dbffile);
			package.AppendRecord(DbfFileName,tempjydm,packstruct,dbf);

			WriteParseLog(__FILE__,__LINE__,"在%s中追加包接收到的消息,",DbfFileName);

			IsFirst = FALSE;
			memset(PackbEndFlag,0x00,sizeof(PackbEndFlag));

			//多结果结束标志
			//memcpy(PackbEndFlag,packstruct->m_Jydm,sizeof(packstruct->m_Jydm));
			if(packstruct->m_Flag[0]=='0')
			{
				package.bEndFlag = true;
			}

		}	//if
			if(package.bEndFlag)
	
	return 0;
}

////开启Server。。。
int Ccommunicate::KDSERVER(PACKSTRUCT *Spackstruct,char *cHoldmem)
{
	/*
	int  iRet;
    int  timeout;
	char cSerIp[16];
	char cSerPort[6];
	char ctimeout[20];
	
	WriteParseLog(__FILE__,__LINE__,"%s","通讯模块,KDSERVER(), ");
	
	GetPrivateProfileString("SERVER","IP","127.0.0.1",cSerIp,16,"..\\conf\\Config.ini");
	GetPrivateProfileString("SERVER","PORT","6000",cSerPort,10,"..\\conf\\Config.ini");
	GetPrivateProfileString("SERVER","TIMEOUT","15",ctimeout,10,"..\\conf\\Config.ini");
	timeout = atoi(ctimeout)*1000;
		
	memset((char *)&Sserv_addr,0,sizeof(Sserv_addr));
	Sserv_addr.sin_family=AF_INET;
	Sserv_addr.sin_addr.s_addr=inet_addr(cSerIp);
	Sserv_addr.sin_port=htons(atoi(cSerPort));
	
	if((Ssock=socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		package.ClearPackStruct(9000,Spackstruct);
		CloseSocket(Ssock);
		return -1;  ////Socket 无效,,
	}

	if (SOCKET_ERROR == setsockopt(Ssock, SOL_SOCKET, SO_LINGER,(char *)&timeout,sizeof(timeout))
		|| SOCKET_ERROR == setsockopt(Ssock, SOL_SOCKET, SO_RCVTIMEO,(char *)&timeout,sizeof(timeout)))
	{
		package.ClearPackStruct(9000,Spackstruct);
		CloseSocket(Ssock);
		return -2;  ////设置Socket超时出错。。
	}

	iRet = Bind(Ssock,(struct sockaddr *)&Sserv_addr,sizeof(Sserv_addr));
	if(iRet)
	{
		package.ClearPackStruct(9000,Spackstruct);
		CloseSocket(Ssock);
		////无法绑定服务器.
		return -3;
	}
	
    if (Listen(Ssock,1) == SOCKET_ERROR) //开始监听客户连接请求
	{
		package.ClearPackStruct(9000,Spackstruct);
		CloseSocket(Ssock);
        return -4;   ////服务器监听失败
	}
	
	memset(&cHdmem,0x00,sizeof(cHdmem));
	memcpy(&cHdmem,&cHoldmem,sizeof(cHoldmem));

	

	int mFlag = 0;
	BOOL IsFirst;
	char ctemp[5];
	char cRecv[RECV_MAX_LEN];

	char dbffile[80];
	char DbfFileName[80];
	TDBF  dbf;

	memset(ctemp,0,5);
	IsFirst = FALSE;

	Ssock = Accept(Ssock, 
		    (LPSOCKADDR)&Sserv_addr, 
			0);

	if (Ssock == INVALID_SOCKET)
	{
		package.ClearPackStruct(9000,Spackstruct);
		CloseSocket(Ssock);
		return -1; ////Accept 处理出错,。
	}
	else
	{	
		iRet = 1;
		while(iRet>0 )
		{
			iRet = Receive(Ssock,ctemp,4,0);
			if(iRet < 0)
			{
				package.ClearPackStruct(9000,Spackstruct);
				CloseSocket(Ssock);
				return -2;  ///接收失败。
			}
			
			if(atoi(ctemp) >= RECV_MAX_LEN)
			{
				package.ClearPackStruct(9000,Spackstruct);
				CloseSocket(Ssock);
				return -3; ////接收到的长度大于最大长度。
			}
			
			iRet = Receive(Ssock,cRecv,atoi(ctemp),0);

			///分解收到数据,??????????

			//memcpy(&Spackstruct,cRecv,sizeof(cRecv));

			if(iRet < 0)
			{
				package.ClearPackStruct(9000,Spackstruct);
				closesocket(Ssock);
				return -2;
			}
			
			/////接收数据合法,,
			iRet = package.ExchangeRecvData(Spackstruct,cRecv, cHdmem);
					
			if(Spackstruct->m_Blx[0] == '1')
			{
				////接收的包为有效包。。。
				
//				char tempStr[80];
				char tempjydm[9];
				memset(tempjydm,0x00,sizeof(tempjydm));
				memcpy(tempjydm,Spackstruct->m_Jydm,sizeof(Spackstruct->m_Jydm));
				
				if(IsFirst)
				{
					WriteParseLog(__FILE__,__LINE__,"创建DBF [%s]文件",dbffile);
					package.CreateDbfFile(tempjydm, dbffile, dbf);
				}
				//GetCurrentDirectory(80,tempStr);
				sprintf( DbfFileName, "..\\dbf\\%s",dbffile);
				package.AppendRecord(DbfFileName,tempjydm,Spackstruct,dbf);
				
				WriteParseLog(__FILE__,__LINE__,"在%s中追加包接收到的消息,",DbfFileName);
				
				IsFirst = FALSE;
				
				break;
			}
		}
	}
	*/
	return 0;
}


int Ccommunicate::comp_char(unsigned char *buff, int len)
{
unsigned char  buff1[5120];

   int i,j;


   

   i  =  0;j  =  0;
   while(i < len){
	if((buff[i]>='0')&&(buff[i]<='9')&&(buff[i+1]>='0')
		         &&(buff[i+1]<='9')){
             buff1[j++] = (buff[i]-'0')*10 + (buff[i+1]-'0') + 1;
	     i += 2;
        } if((buff[i] == ' ')||((buff[i]>='0')&&(buff[i]<='9'))||((buff[i]<='z')&&(buff[i]>='a'))||((buff[i]<='Z')&&(buff[i]>='A'))){
	     buff1[j++]  =  buff[i++] + 100;
	}  else {
	     buff1[j++]=0;
	     buff1[j++]=buff[i++];
	}
   }

   buff1[j] = 0;

   memcpy(buff,buff1,j+1);
   return  j+1;
}

int Ccommunicate::uncomp_char(unsigned char *buff, int len)
{
unsigned char  buff1[5120];

   int i,j;
   int n;
   

   j  =  0;
   i = 0;
   while(i<len){

      if(buff[i] == 0){
	 buff1[j++] = buff[i+1];
	 i += 2;
	 continue;
      } if((unsigned char)buff[i] > 100) {
	  buff1[j++] = (unsigned char)buff[i] - 100;
	  i++;
          continue;
      } else {
          n=(unsigned char)buff[i] - 1;
          buff1[j++] = '0'+ n/10;
          buff1[j++] = '0'+ n%10;
	  i++;
          continue;
      }
   }

   buff1[j] = 0;
   strcpy((char *)buff,(char *)buff1);
   return   j;

}

⌨️ 快捷键说明

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