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

📄 communicate.cpp

📁 一个与银行通讯的测试程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// communicate.cpp: implementation of the Ccommunicate class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HmComm.h" 
#include "communicate.h"

#include "DebugLog.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



LONG ThreadProc(LPARAM pParam);

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Ccommunicate::Ccommunicate()
{
	
}

Ccommunicate::~Ccommunicate()
{
	
}

SOCKET Ccommunicate::Accept(SOCKET sockfd, struct sockaddr *lpaddr, int *lpaddrlen )
{
	return ( accept(sockfd, lpaddr, lpaddrlen));
}

int Ccommunicate::CloseSocket(SOCKET sockfd)
{
    shutdown(sockfd,0x02);
	return (closesocket(sockfd));
}

SOCKET Ccommunicate::Connect(LPCTSTR cIpaddress, UINT socketport, int nTimeOut)
{
	struct sockaddr_in serv_addr;
	
	memset((char *)&serv_addr,0,sizeof(serv_addr));
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_addr.s_addr=inet_addr(cIpaddress);
	serv_addr.sin_port=htons(socketport);
	
	if((sockfd=socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		return SOCKET_ERROR;
	}

	if (SOCKET_ERROR == setsockopt(sockfd, SOL_SOCKET, SO_LINGER,(char *)&nTimeOut,sizeof(nTimeOut))
		|| SOCKET_ERROR == setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO,(char *)&nTimeOut,sizeof(nTimeOut)))
	{
		//CloseSocket(sockfd);
		return SOCKET_ERROR;
	}

	if(connect(sockfd, (struct sockaddr *)(& serv_addr), sizeof(serv_addr)) == SOCKET_ERROR)
	{
		//CloseSocket(sockfd);
		return SOCKET_ERROR;
	}
	else
	{
		return sockfd;
	}
}

int Ccommunicate::Listen(SOCKET sockfd, int backlog)
{
    return ( listen(sockfd, backlog));
}

int Ccommunicate::Receive(SOCKET sockfd, char *lpBuf, int nBufLen, int nFlags)
{
    int revlen;
	revlen=recv(sockfd,lpBuf,nBufLen,nFlags);

	WriteParseLog(__FILE__,__LINE__,"接收数据 [%s]",lpBuf);
	return revlen;
}

int Ccommunicate::Send(SOCKET sockfd, void *lpBuf, int nBufLen, int nFlags)
{
	int ret;
	ret = send(sockfd, (LPSTR)lpBuf, nBufLen, nFlags);

	WriteParseLog(__FILE__,__LINE__,"发送数据 [%s]",lpBuf);
	return ret;
}

/*==================================================================================
//函数名称: Bind
//输入参数: SOCKET sockfd: 通信句柄
//          const struct sockaddr *  lpName: IP地址结构
//          int namelen: IP地址结构长度
//输出参数: 无
//返    回: ==0  处理成功,否则绑定处理失败。
//功    能: 绑定函数。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
int Ccommunicate::Bind(SOCKET sockfd, const struct sockaddr *  lpName, int namelen )
{
	return ( bind(sockfd, lpName, namelen) );
}

/*==================================================================================
//函数名称: HMCLIENT
//输入参数: PACKSTRUCT *packstruct:通信数据结构
//输出参数: PACKSTRUCT *packstruct:通信数据结构
//返    回: <0  通信处理失败;   ==0  处理成功。  
//功    能: 客户端通信函数,能完成单、多次握手的通信。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
int Ccommunicate::HMCLIENT(PACKSTRUCT *packstruct, char * cHoldmem)
{
	int  iRet;
    int  timeout;
	BOOL IsFirst;
	char cIpaddress[16];
	char cPort[6];
	char ctimeout[20];
	char ctemp[5];
	char cSend[SEND_MAX_LEN+4];
	char SendReqPack[SEND_MAX_LEN];
	char cRecv[RECV_MAX_LEN];
	char dbffile[80];
	char DbfFileName[80];
	TDBF  dbf;
	
	IsFirst = TRUE;
	memset(ctemp,0,5);
		

	//处理两个特殊的交易
    if(memcmp(packstruct->m_Jydm,"1000",4)==0)
	{
		char tmpStr[50];
		char tmpstr[50];
		int iLen=0;

	    
		//admin
		memset(tmpStr,0x00,sizeof(tmpStr));
		memset(tmpstr,0x00,sizeof(tmpstr));
		package.GetValue( packstruct->m_Data, tmpStr, 1, 0x01 );
		if(strlen(tmpStr)==0)
		{
			memcpy(packstruct->m_Fhdm,"9900",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);
  
		return -3;
		}
		strcpy(tmpstr,"  ");
    	strcat(tmpstr,tmpStr);

        //adminpw
		memset(tmpStr,0x00,sizeof(tmpStr));
		package.GetValue( packstruct->m_Data, tmpStr, 2, 0x01 );
		if(strlen(tmpStr)==0)
		{
			memcpy(packstruct->m_Fhdm,"9900",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);
  			return -3;
		}
		strcat(tmpstr,tmpStr);

		//adminpw
		memset(tmpStr,0x00,sizeof(tmpStr));
		package.GetValue( packstruct->m_Data, tmpStr, 3, 0x01 );
		if(strlen(tmpStr)==0)
		{
			memcpy(packstruct->m_Fhdm,"9900",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);
  			return -3;
		}
		strcat(tmpstr,tmpStr);


		memcpy(packstruct->m_Fhdm,"0000",sizeof(packstruct->m_Fhdm));
		
		memset(packstruct->m_Data,0x00,sizeof(packstruct->m_Data));
	
		
     	strcat(packstruct->m_Data, tmpstr);//注意不要strcpy
		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);
   
		sprintf( DbfFileName, "..\\dbf\\admin_record.dbf");
		package.AppendRecord(DbfFileName,"1000",packstruct,dbf);
		return 0;
	}
	//删除管理员
	else if(memcmp(packstruct->m_Jydm,"1999",4)==0)
	{
		char tmpStr[50];
		char admin[50],admindbf[50];
		char passwd[50],passwddbf[50];
		char szBuff[50];
		int iLen=0;
        unsigned int iRcdNum;
		TDBF dbf;
		//admin
		memset(admin,0x00,sizeof(admin));
		package.GetValue( packstruct->m_Data, admin, 1, 0x01 );
		if(strlen(admin)==0)
		{
			memcpy(packstruct->m_Fhdm,"9900",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);
  			return -3;
		}
	
		//adminpw
		memset(passwd,0x00,sizeof(passwd));
		package.GetValue( packstruct->m_Data, passwd, 2, 0x01 );
		if(strlen(passwd)==0)
		{
			memcpy(packstruct->m_Fhdm,"9900",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);
			return -3;
		}
		

		dbf.Open("..\\dbf\\admin_record.dbf");
		iRcdNum = dbf.GetRecordNumber();
		if(iRcdNum < 1)
		{
			memcpy(packstruct->m_Fhdm,"9900",sizeof(packstruct->m_Fhdm));
		    memset(packstruct->m_Data,0x00,sizeof(packstruct->m_Data));
			strcpy(packstruct->m_Data, "删除失败iRcdNum < 1");
			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);
			return -3;
		}
	for(unsigned int i = 1; i <= iRcdNum ; i++)
	{
		dbf.ReadRecord(i);
		// 取第1列: 管理员
		memset(szBuff, 0x00, sizeof(szBuff));
		dbf.GetField(1, szBuff, 50);
		//m_strTool.alltrim(szBuff);
        memset(admindbf,0x00,sizeof(admindbf));
        strcpy(admindbf, szBuff);

⌨️ 快捷键说明

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