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

📄 callbackfun.cpp

📁 网络通信模块。开发包的使用者需要自行承担使用本开发包的风险
💻 CPP
字号:
#include "stdafx.h"


//服务器回调函数
void RmtCallBack(CRemoteHelper* pHelper,SOCKET sock)
{
	char szBuf[400]={0};
	CString szU,szP;
	//int iInput = pHelper->GetUsernameAndPwd(szU,szP,30,FALSE,TRUE);//身份验证
	//比较 szU,szP 确定身份
	while(1)
	{
		char szOut[200]={0};
		if(!pHelper->IsGoon())
		{//检查退出标记
			sprintf(szOut,"远程监控{%d} IsGoon = FALSE,退出服务线程",pHelper->GetSeqID());
			//利用输出对象向主控台进行输出,同时将信息添加到其他监控客户端
			pHelper->GetRemoteMonitorManager()->OutputToMainConsole(COutputDisplay::GeneralWarn,szOut,TRUE,FALSE);
			break; //退出
		}
		if(!pHelper->SendBufMsgToClient())
		{//将信息发送到客户端
			printf(szOut,"远程监控{%d} 发送错误,退出服务线程",pHelper->GetSeqID());
			//利用输出对象向主控台进行输出,同时将信息添加到其他监控客户端
			pHelper->GetRemoteMonitorManager()->OutputToMainConsole(COutputDisplay::GeneralError,szOut,TRUE,FALSE);
			break;
		}
		//利用 CRemoteHelper 提供的网络读功能,通过Helper对象的缓冲区接收数据
		int iRet,iErrorCode;
		//读入数据到缓冲区
		iRet = pHelper->ReadDataFromClient(4,iErrorCode,TRUE);
		if(iRet >0)
		{
			//取出一行数据
			iRet = pHelper->RemoveLineFromBuffer(szBuf,400,FALSE);
			if(iRet >0)//数据过长,则直接删除所有数据
			{//接收连接端输入,并且在所有的屏幕上进行显示
				pHelper->ClearBuffer();
				sprintf(szOut,"远程监控{%d} 缓冲区内数据过多,直接清除",pHelper->GetSeqID());
				pHelper->GetRemoteMonitorManager()->OutputToMainConsole(szOut,FALSE,FALSE);
			}
			else if(iRet==0)
			{//在主屏幕上进行显示
				if(strcmp("help",szBuf) == 0)
				{//help command
					pHelper->GetRemoteHandlerData()->PushMsg("help : 帮助命令\n\r");
					pHelper->GetRemoteHandlerData()->PushMsg("exit : 退出监控\n\r");
				}
				if(strcmp("exit",szBuf)==0)
				{//exit command
					break;
				}
				else
				{
					pHelper->GetRemoteHandlerData()->PushMsg("命令错误\n\r");
				}
			}
		}
		else if(iRet ==-1 && iErrorCode == -1)
		{//执行 ReadDataFromClient 发现网络错误
			sprintf(szOut,"远程监控{%d} 接收失败【网络错误】,准备退出服务线程",pHelper->GetSeqID());
			//利用输出对象向主控台进行输出,同时将信息添加到其他监控客户端
			pHelper->GetRemoteMonitorManager()->OutputToMainConsole(COutputDisplay::GeneralWarn,szOut,TRUE,FALSE);
			break;
		}
		else if(iRet ==-1 && iErrorCode == -2)
		{/*处理无数据读入的情况*/}
	}
}

void TCPSocketServerCallBack(CServerStatus* pSS,CSocketChildThread* pChild)
{
	BYTE bData[100];
	char szTemp[200];
	int iRead;
	while(1)
	{//10 秒超时
		int iRet = pChild->m_sockComm.TestAndRecv(10,100,bData,iRead);
		if(iRet ==SP_ERR_SUCCESS || iRet ==SP_ERR_NOT_FINISH)
		{//有数据到达
			sprintf(szTemp,"TCPSocket客户端{%d} Recved %d",pChild->m_iSerial,iRead);
			pChild->m_pStore->GetDisplay()->PutLine(COutputDisplay::Message,szTemp);
			int iWrote=0;
			pChild->m_sockComm.Send(iRead,bData,iWrote);
		}
		else 
		{//网络故障,或者超时
			sprintf(szTemp,"TCPSocket客户端{%d} 网络故障,或者超时",pChild->m_iSerial);
			pChild->m_pStore->GetDisplay()->PutLine(COutputDisplay::GeneralError,szTemp);
			break;
		}
	}
}

⌨️ 快捷键说明

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