📄 cfile.cpp
字号:
if (memcmp(pRespond->filestatus,"OK",2)!=0)
{
if (memcmp(pRespond->filestatus,"ERR",3)==0)
{
memcpy(pszRet,pRespond->filestatus+3,2);
pszRet[2] = 0;
iRet=atoi(pszRet);
printf("ATMP Recv Respond error [%d]!",iRet);
return(-iRet);
}
printf("ATMP Recv Respond error !");
return(-42);
}
return(0);
}
int CFileProcess::iSendFileData(SOCKET iSockfd,struct FILEDATA *pFileData,char *pszFileBuf,int iDataLen,int timeout)
{
char pszSendBuf[DATA_LEN+1];
int iSendLen;
int iRet;
memset(pszSendBuf,0,sizeof(pszSendBuf));
memcpy(pszSendBuf,pFileData->cmd_code,6);
pszSendBuf[6]=pFileData->filedata_sign;
memcpy(pszSendBuf+7,pFileData->fileoffset,10);
memcpy(pszSendBuf+17,pFileData->datalen,5);
iSendLen = sizeof(*pFileData);
memcpy(pszSendBuf+iSendLen,pszFileBuf,iDataLen);
iSendLen += iDataLen;
AddBufLen(pszSendBuf,&iSendLen);
iRet=FileWrite(iSockfd,pszSendBuf,iSendLen);
if(iRet!=0)
{
printf("Write error, Send FileData errno=[%d]\n",WSAGetLastError());
return(-50);
}
return(0);
}
int CFileProcess::iRecvFileData(SOCKET iSockfd,struct FILEDATA *pFileData,char *pszFileBuf,int *iDataLen,int timeout)
{
int iRecvLen,iRet;
char pszRecvBuf[DATA_LEN+1];
char pszRet[10];
memset(pszRet,0x00,sizeof(pszRet));
iRecvLen=0;
memset(pszRecvBuf,0,sizeof(pszRecvBuf));
iRet=FileRead(iSockfd,pszRecvBuf,&iRecvLen);
if(iRet!=0)
{
char tmpstr[256];
sprintf(tmpstr,"line=[%d] read error FileData iLen=[%d]",__LINE__,iRecvLen);
// ULOG("fser.log",tmpstr);
sprintf(tmpstr,"terry iRecvFileData FileRead return[%d] : -1",iRet);
// ULOG("fser.log",tmpstr);
if(iRet!=10053)
return(-1);
else
return iRet;
}
pszRecvBuf[iRecvLen]=0;
iRet=DelBufLen(pszRecvBuf,&iRecvLen);
if (iRet<0)
{
char tmpstr[256];
sprintf(tmpstr,"terry DelBufLen return[%d] :",iRet);
// ULOG("fser.log",tmpstr);
return(-61);
}
memset((char*)pFileData,0,sizeof(*pFileData));
memcpy(pFileData->cmd_code,pszRecvBuf,6);
pFileData->filedata_sign=pszRecvBuf[6];
memcpy(pFileData->fileoffset,pszRecvBuf+7,10);
memcpy(pFileData->datalen,pszRecvBuf+17,5);
pFileData->datalen[5]=0;
*iDataLen = atoi(pFileData->datalen);
if (((pFileData->filedata_sign!='M')&&
(pFileData->filedata_sign!='E')&&
(*iDataLen<=0))
||(memcmp(pszRecvBuf+6,"ERR",3)==0))
{
if (memcmp(pszRecvBuf+6,"ERR",3)==0)
{
memcpy(pszRet,pszRecvBuf+9,2);
pszRet[2] = 0;
iRet=atoi(pszRet);
//printf("ATMP Recv Respond error [%d]!",iRet);
char tmpstr[128];
sprintf(tmpstr,"ATMP Recv Respond error [%d]!",iRet);
// ULOG("fser.log",tmpstr);
return(-iRet);
}
/********/
//printf("line=[%d] invalid DataBuf",__LINE__);
char tmpstr[128];
sprintf(tmpstr,"line=[%d] invalid DataBuf",iRet);
// ULOG("fser.log",tmpstr);
return(-iRet);
return(-62);
}
memcpy(pszFileBuf,pszRecvBuf+sizeof(*pFileData),*iDataLen);
return(0);
}
int iStrToHeader(struct FILEHEADER *pFileHeader,char *pszRecvBuf,int iRecvLen)
{
int iRet;
iRet=DelBufLen(pszRecvBuf,&iRecvLen);
if (iRet<0) return(-1);
memset((char*)pFileHeader,0,sizeof(*pFileHeader));
memcpy(pFileHeader->cmd_code,pszRecvBuf,6);
memcpy(pFileHeader->scr_fname,pszRecvBuf+6,80);
memcpy(pFileHeader->dest_fname,pszRecvBuf+86,80);
memcpy(pFileHeader->filelen,pszRecvBuf+166,10);
memcpy(pFileHeader->pstart,pszRecvBuf+176,10);
pFileHeader->trans_sign=pszRecvBuf[186];
memcpy(pFileHeader->max_buf_len,pszRecvBuf+187,5);
if ((pFileHeader->trans_sign!='U')&&
(pFileHeader->trans_sign!='D'))
{
printf("iStrToHeader Recv Header error !");
return(-2);
}
return(0);
}
int CFileProcess::giPutFile(SOCKET sock, char *scr_path ,char *dest_path,int max_buf_len)
{
struct FILEHEADER hFileHeader;
struct FILEDATA hFileData;
struct RESPONSE hRespond;
int iRet;
int timeout;
long lFileLocate,lFileLen;
int iReadLen,iDataLen;
char pszFileBuf[DATA_LEN+1],pszTemp[20];
FILE *fp;
timeout =30 ;
if((fp=fopen(scr_path,"rb")) == NULL)
{
printf("open file error!\n");
return(-1);
}
/*********组成报文头*******/
lFileLen = GetFileLength(fp);
memset((char*)&hFileHeader,0,sizeof(hFileHeader));
memcpy(hFileHeader.cmd_code,"900011",6);
strcpy(hFileHeader.scr_fname,scr_path);
strcpy(hFileHeader.dest_fname,dest_path);
FileTrace(hFileHeader.dest_fname);
sprintf(pszTemp,"%010ld",lFileLen);
memcpy(hFileHeader.filelen,pszTemp,10);
sprintf(pszTemp,"%010d",0);
memcpy(hFileHeader.pstart,pszTemp,10);
hFileHeader.trans_sign = 'U';
sprintf(pszTemp,"%05d",max_buf_len);
memcpy(hFileHeader.max_buf_len,pszTemp,5);
iRet=iSendHeader(sock,&hFileHeader,timeout);
if (iRet<0)
{
fclose(fp);
return(iRet);
}
iRet=iRecvRespond(sock,&hRespond,timeout);
if (iRet<0)
{
fclose(fp);
return(iRet);
}
/*********传送文件内容报文并接受响应*******/
lFileLocate=0;
iReadLen = max_buf_len - 4 - sizeof(hFileData);
do
{
iDataLen=fread(pszFileBuf,1,iReadLen,fp);
if (iDataLen<0)
{
fclose(fp);
return(-5);
}
pszFileBuf[iDataLen]=0;
memset((char*)&hFileData,0,sizeof(hFileData));
memcpy(hFileData.cmd_code,"900011",6);
if (!feof(fp))
hFileData.filedata_sign = 'M';
else
hFileData.filedata_sign = 'E';
sprintf(pszTemp,"%010ld",lFileLocate);
memcpy(hFileData.fileoffset,pszTemp,10);
sprintf(pszTemp,"%05d",iDataLen);
memcpy(hFileData.datalen,pszTemp,5);
lFileLocate += iDataLen;
iRet=iSendFileData(sock,&hFileData,pszFileBuf,iDataLen,timeout);
if (iRet<0)
{
fclose(fp);
return(iRet);
}
iRet=iRecvRespond(sock,&hRespond,timeout);
if (iRet<0)
{
fclose(fp);
return(iRet);
}
}while (!feof(fp));
fclose(fp);
return(0);
}
int CFileProcess::giGetFile(SOCKET sock, char *scr_path ,char *dest_path,int max_buf_len)
{
struct FILEHEADER hFileHeader;
struct FILEDATA hFileData;
struct RESPONSE hRespond;
int iRet;
int timeout,j;
long lFileLen,lFileOffset;
int iDataLen;
char pszFileBuf[DATA_LEN+1],pszFileOffset[11],pszTemp[20];
FILE *fp;
timeout =30 ;
if((fp=fopen(dest_path,"wb+")) == NULL)
{
printf("open file error!\n");
return(-4);
}
/*********组成报文头*******/
lFileLen = GetFileLength(fp);
memset((char*)&hFileHeader,0,sizeof(hFileHeader));
memcpy(hFileHeader.cmd_code,"900011",6);
strcpy(hFileHeader.scr_fname,scr_path);
strcpy(hFileHeader.dest_fname,dest_path);
sprintf(pszTemp,"%010ld",lFileLen);
memcpy(hFileHeader.filelen,pszTemp,10);
sprintf(pszTemp,"%010d",0);
memcpy(hFileHeader.pstart,pszTemp,10);
hFileHeader.trans_sign = 'D';
sprintf(pszTemp,"%05d",max_buf_len);
memcpy(hFileHeader.max_buf_len,pszTemp,5);
iRet=iSendHeader(sock,&hFileHeader,timeout);
if(iRet<0)
{
fclose(fp);
return(iRet);
}
j=0; /*报文计数器*/
do
{
// ULOG("fser.log","RecvFileDate!");
iRet=iRecvFileData(sock,&hFileData,pszFileBuf,&iDataLen,timeout);
if(iRet<0||iRet==10053)
{
fclose(fp);
// ULOG("fser.log","iRecvFileData error terry");
return(iRet);
}
memcpy(pszFileOffset,hFileData.fileoffset,10);
pszFileOffset[10]=0;
lFileOffset=atol(pszFileOffset);
if (lFileOffset!=ftell(fp))
{
printf("WriteFile error!\n");
fclose(fp);
return(-6);
}
fwrite(pszFileBuf,1,iDataLen,fp);
if (hFileData.filedata_sign!='E')
{
/*********组成OK响应包*******/
memset((char*)&hRespond,0,sizeof(hRespond));
memcpy(hRespond.cmd_code,"900011",6);
memcpy(hRespond.filestatus,"OK",2);
/*******发送响应包***/
iRet=iSendRespond(sock,&hRespond,timeout);
if (iRet<0)
{
fclose(fp);
return(iRet);
}
}
if (j==49999) j=0;
else j++;
}while ((hFileData.filedata_sign!='E')&&(j<=MAX_BUF_NUM));
fclose(fp);
return(0);
}
int CFileProcess::PutFile(int iPort,char *ipAddress,char *src_path,char *dest_path,int max_buf_len)
{
int iRet;
iRet=SocketInit();
if(iRet!=0)
{
// ULOG("fser.log","Init -1 terry");
return -1;
}
iRet=ConnectFileHost(ipAddress,iPort);
if(iRet!=0)
{
// ULOG("fser.log","connet -2 terry");
return -2;
}
iRet=giPutFile(m_pFileSocket,src_path,dest_path,max_buf_len);
AfterFile();
if(iRet!=0)
{
}
return iRet;
}
int CFileProcess::GetFile(int iPort,char *IpAddress,char *src_path,char *dest_path,int max_buf_len)
{
int iRet;
// ULOG("fser.log", "Connect init");
iRet=SocketInit();
if(iRet!=0)
{
// ULOG("fser.log","g Init -1 terry");
return -1;
}
ULOG("fser.log", "Connect to host");
iRet=ConnectFileHost(IpAddress,iPort);
if(iRet!=0)
{
// ULOG("fser.log","g connet -2 terry");
return -2;
}
// ULOG("fser.log", "Begin to Download!");
iRet=giGetFile(m_pFileSocket,src_path,dest_path,max_buf_len);
AfterFile();
if(iRet!=0)
{
;
}
return iRet;
}
extern "C" _declspec ( dllexport )
int tsfile(int flag,int iPort,char *IpAddress,char *src_path,char *dest_path,int max_len)
{
CFileProcess m_file;
int ret;
char szTemp[256];
if(flag==0)//get file
{
// ULOG("fser.log", "Begin download...terry");
sprintf(szTemp, "Port:[%d],IP:[%s],Src:[%s],Des:[%s]", iPort, IpAddress, src_path, dest_path);
// ULOG("fser.log", szTemp);
// sprintf(szTemp,"terry");
// ULOG("fser.log",szTemp);
ret=m_file.GetFile(iPort,IpAddress,src_path,dest_path,max_len);
int i=0;
while(i<5 && ret==10053)
{
Sleep(1000);
sprintf(szTemp,"10053,try again more %d time,terry",i);
ULOG("fser.log",szTemp);
ret=m_file.GetFile(iPort,IpAddress,src_path,dest_path,max_len);
i++;
}
/*
if(ret==10053)
{
Sleep(1000);
sprintf(szTemp,"10053,try again,terry");
ULOG("fser.log",szTemp);
ret=m_file.GetFile(iPort,IpAddress,src_path,dest_path,max_len);
if(ret==10053)
{
Sleep(1000);
sprintf(szTemp,"10053,try again more time,terry");
ULOG("fser.log",szTemp);
ret=m_file.GetFile(iPort,IpAddress,src_path,dest_path,max_len);
if(ret==10053)
{
Sleep(1000);
sprintf(szTemp,"10053,try again more 2 times,terry");
ULOG("fser.log",szTemp);
ret=m_file.GetFile(iPort,IpAddress,src_path,dest_path,max_len);
}
}
}
*/
return ret;
}
else
{
ret=m_file.PutFile(iPort,IpAddress,src_path,dest_path,max_len);//putfile
return ret;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -