📄 communicate.cpp
字号:
// 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 + -