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

📄 recvdata.cpp

📁 PDA通讯网关服务器源码程序
💻 CPP
字号:
// RecvData.cpp : implementation file
//

#include "stdafx.h"
#include "GateAgent.h"
#include "RecvData.h"

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


extern int g_nMax;


#define PACKLEN 8
#define TELLEN 13
/////////////////////////////////////////////////////////////////////////////
// CRecvData

IMPLEMENT_DYNCREATE(CRecvData, CWinThread)

CRecvData::CRecvData()
{
}

CRecvData::~CRecvData()
{
	m_pDlg->OnInsertMess("线程退出",true,true);
	if (g_nMax>0)
	{
		g_nMax=g_nMax-1;
	}
}

BOOL CRecvData::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CRecvData::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CRecvData, CWinThread)
	//{{AFX_MSG_MAP(CRecvData)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRecvData message handlers
int CRecvData::Run() 
{
	char m_pRecvBuf[1000]={0};		// 接收数据缓冲区
	char m_nTmp[200]={0};
	memset(m_pRecvBuf, 0, sizeof(m_pRecvBuf));
	int iRecvBytes = 0;
	int iRet1 =CheckSocketReadable(m_ClientSocket,5,0);
	if(iRet1<0)
	{
		m_pDlg->OnInsertMess("套接字不可读",true,true);
		return -1;
	}

	memset(m_pRecvBuf,0x00,sizeof(m_pRecvBuf));
	iRecvBytes = recv(m_ClientSocket, m_pRecvBuf, sizeof(m_pRecvBuf), 0);
	if (iRecvBytes <= 0)
	{		
		sprintf(m_nTmp, "客户端[IP:%s ]退出连接", m_nClientIP);
		m_pDlg->OnInsertMess(m_nTmp,true,true);
		closesocket(m_ClientSocket);
		return -1;
	}
	
	char chTel[TELLEN]={0};
	char chText[300]={0};
	CString strText;
	memcpy(chTel,m_pRecvBuf+PACKLEN,TELLEN);//复制手机号码
	chTel[TELLEN-1]='\0';

	memcpy(chText,m_pRecvBuf+PACKLEN+TELLEN,300);//复制text
	chText[300-1]='\0';

	strText.Format("%s",chText);
	strText.TrimRight();


	SYSTEMTIME tm;	
	char chTime[14]={0};
	//设置写环境
	GetLocalTime(&tm);
	sprintf(chTime,"%04d%02d%02d%02d%02d%02d",tm.wYear, tm.wMonth, tm.wDay,tm.wHour,tm.wMinute,tm.wSecond);
   
	CString strMessage;
	OnDoWith(0,chTel,chTime,strText.GetBuffer(0),0);
    int tt=OnSend();
	if (tt==44 || tt==55)
	{
		m_pDlg->OnSend(m_ClientSocket, "m_pRecvBuf","no send","0",7);
	}
	closesocket(m_ClientSocket);

	return 0;
//	return CWinThread::Run();
}

int CRecvData::OnDoWith(int nHandle,char *pchTelNum,char *pchTime,char *pchText,char *pchFlag)
{
	return m_pDlg->OnDoWith(nHandle,pchTelNum,pchTime,pchText,pchFlag);

}

int CRecvData::CheckSocketReadable(int socket, unsigned long delaySec, unsigned long delayUsec)
{
	fd_set fdset;
	struct timeval tv;
	tv.tv_sec=delaySec;
	tv.tv_usec=delayUsec;
	FD_ZERO(&fdset);
	FD_SET(socket,&fdset);
	
	if (delaySec == 0 && delayUsec == 0)	
		return  select(socket+1,&fdset,NULL,NULL,NULL);
	else
		return  select(socket+1,&fdset,NULL,NULL,&tv);
}

int CRecvData::OnSend()
{
	return m_pDlg->OnPreSend(m_iSendNum,m_ClientSocket,0);
}

⌨️ 快捷键说明

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