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

📄 peeperlib.cpp

📁 这是个soket的代码不是太实用但是对出学者还是有些帮助的 有需要的可以
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if(nRet <= 0)
			{
				bRet = FALSE;
				break ;
			}
			nSize = *((int*)(chData));
			if(nSize <= 0)
			{
				bRet = FALSE;
				break ;
			}
			int nWrite = 0;
			while(nWrite < nSize)
			{
				nRet = sckClient.Receive(chFileData, PL_SOCKET_MAXBYTES);
				if(nRet <= 0)
				{
					bRet = FALSE;
					break ;
				}
				file.Write(chFileData, nRet);
				nWrite += nRet;
				if(hNotifyWnd != NULL)
				{
					int nProgress = (int)(((float)nWrite)*100.0f/((float)nSize));
					::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE, 
						(WPARAM)nProgress, NULL);
				}
				bRet = TRUE;
			}
		}
		else
		{
			nSize = file.GetLength();
			int nRead = nSize;
			ZeroMemory(chData, 10);
			memcpy(chData, &nSize, sizeof(int));
			int nRet = sckClient.Send(chData, sizeof(int));
			if(nRet <= 0)
			{
				bRet = FALSE;
				break ;
			}
			while(nRead > 0)
			{
				int n1 = min(nRead, PL_SOCKET_MAXBYTES);
				int n2 = file.Read(chFileData, n1);
				nRead -= n2;
				nRet = sckClient.Send(chFileData, n2);
				if(nRet <= 0)
				{
					bRet = FALSE;
					break ;
				}
				if(hNotifyWnd != NULL)
				{
					int nProgress = (int)(((float)(nSize - nRead))*100.0f/((float)nSize));
					::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE, 
						(WPARAM)nProgress, NULL);
				}
				bRet = TRUE;
			}
		}
		delete []chFileData;
	}while(0);
	if(sckClient.m_hSocket != INVALID_SOCKET)
	{
		sckClient.Close();
	}
	if(sckServer.m_hSocket != INVALID_SOCKET)
	{
		sckServer.Close();
	}
	if(file.m_hFile != CFile::hFileNull)
	{
		file.Close();
	}

	return bRet;
}

BOOL WINAPI PL_DeleteFile(char *chFileName)
{
	BOOL bRet = FALSE;
	DWORD dwFlag = ::SetFileAttributes(chFileName, FILE_ATTRIBUTE_NORMAL);
	if(dwFlag != 0xFFFFFFFF)
	{
		bRet = ::DeleteFile(chFileName);
	}

	return bRet;
}

BOOL WINAPI PL_MoveFile(char *chSrcFileName, char *chDesFileName)
{
	BOOL bRet = FALSE;
	DWORD dwFlag = ::SetFileAttributes(chSrcFileName, FILE_ATTRIBUTE_NORMAL);
	if(dwFlag != 0xFFFFFFFF)
	{
		bRet = ::MoveFile(chSrcFileName, chDesFileName);
	}

	return bRet;
}

BOOL WINAPI PL_SendMail(CString strSMTP, CString strFrom, 
						CString strTo, CString strSubject, CString strBody)
{
	BOOL bRet = FALSE;
	CSocket sckSmtp;
	if(sckSmtp.Create())
	{
		char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", 
			"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
		SYSTEMTIME sm;
		::GetLocalTime(&sm);
		CString strDate;
		//                  日  月  年    时  分  秒  
		strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"), 
			sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100, 
			sm.wHour, sm.wMinute, sm.wSecond);
		char chTemp[1024];

		int nRet = -1;
		if(sckSmtp.Connect(strSMTP, 25))
		{
			do
			{
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//欢迎用户
				
				TCHAR local_host[80];
				ZeroMemory(local_host, 80*sizeof(TCHAR));
				::gethostname(local_host, 80);
				CString strUser = CString(local_host);

				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "HELO %s\r\n", strUser);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//mail from
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//rcpt to
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//Data
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "DATA\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//信件内容
				//时间
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "Date: %s\r\n", strDate);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//From
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "From:%s\r\n", strFrom);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//To
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "To:%s\r\n", strTo);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//CC
				//			ZeroMemory(chTemp, 1024);
				//			sprintf(chTemp, "CC:%s\r\n", strCC);
				//			sckSmtp.Send(chTemp, strlen(chTemp));
				//Subject
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "Subject:%s\r\n", strSubject);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//内容
				int nLen = strBody.GetLength() + 5;
				char *chBody = new char[nLen];
				ZeroMemory(chBody, nLen);
				sprintf(chBody, "%s\r\n", strBody);
				nRet = sckSmtp.Send(chBody, strlen(chBody));
				delete []chBody;
				if(nRet < 0)
					break ;
				//结束
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, ".\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//退出
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "QUIT\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				bRet = TRUE;
			}while(0);
		}
		sckSmtp.Close();
	}

	return bRet;
}

BOOL WINAPI PL_SendMail2(CString strSMTP, CString strFrom, CString strAuth, 
							  CString strPass, CString strTo, CString strSubject, 
							  CString strBody)
{
	BOOL bRet = FALSE;
	CSocket sckSmtp;
	if(sckSmtp.Create())
	{
		char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", 
			"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
		SYSTEMTIME sm;
		::GetLocalTime(&sm);
		CString strDate;
		//                  日  月  年    时  分  秒  
		strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"), 
			sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100, 
			sm.wHour, sm.wMinute, sm.wSecond);
		char chTemp[1024];

		int nRet = -1;
		if(sckSmtp.Connect(strSMTP, 25))
		{
			do
			{
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//欢迎用户
				
				char local_host[80];
				ZeroMemory(local_host, 80);
				DWORD dwLen = 80;
				GetUserName(local_host, &dwLen);

				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "EHLO %s\r\n", local_host);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				// auto login
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "AUTH LOGIN\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				// verify user(Base64)
				CBase64 cb;
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "%s\r\n", cb.Encode(strAuth.GetBuffer(0), strAuth.GetLength()));
				strAuth.ReleaseBuffer();
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;

				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				// verify password
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "%s\r\n", cb.Encode(strPass.GetBuffer(0), strPass.GetLength()));
				strPass.ReleaseBuffer();
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;

				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;

				//mail from
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//rcpt to
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//Data
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "DATA\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//信件内容
				//时间
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "Date: %s\r\n", strDate);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//From
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "From:%s\r\n", strFrom);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//To
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "To:%s\r\n", strTo);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//CC
				//			ZeroMemory(chTemp, 1024);
				//			sprintf(chTemp, "CC:%s\r\n", strCC);
				//			sckSmtp.Send(chTemp, strlen(chTemp));
				//Subject
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "Subject:%s\r\n", strSubject);
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//内容
				int nLen = strBody.GetLength() + 5;
				char *chBody = new char[nLen];
				ZeroMemory(chBody, nLen);
				sprintf(chBody, "%s\r\n", strBody);
				nRet = sckSmtp.Send(chBody, strlen(chBody));
				delete []chBody;
				if(nRet < 0)
					break ;
				//结束
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, ".\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				//接收信息
				ZeroMemory(chTemp, 1024);
				nRet = sckSmtp.Receive(chTemp, 1024);
				if(nRet < 0)
					break ;
				if(strncmp(chTemp, "220", 3) != 0 &&
				   strncmp(chTemp, "250", 3) != 0 &&
				   strncmp(chTemp, "334", 3) != 0 &&
				   strncmp(chTemp, "235", 3) != 0 &&
				   strncmp(chTemp, "354", 3) != 0 &&
				   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
					break ;
				//退出
				ZeroMemory(chTemp, 1024);
				sprintf(chTemp, "QUIT\r\n");
				nRet = sckSmtp.Send(chTemp, strlen(chTemp));
				if(nRet < 0)
					break ;
				bRet = TRUE;
			}while(0);
		}
		sckSmtp.Close();
	}

	return bRet;
}

BOOL WINAPI PL_DetectInternetConnect(CString strHTTP)
{
	BOOL bRet = FALSE;
	HINTERNET hSession = NULL;
	hSession = ::InternetOpen(_T("peeper"), PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);
	if(hSession)
	{
		HINTERNET hHTTPSession = ::InternetOpenUrl(hSession,
			strHTTP, NULL, 0, INTERNET_FLAG_RELOAD, 0);
		if(hHTTPSession)
		{
			bRet = TRUE;
			::InternetCloseHandle(hHTTPSession);
		}
		::InternetCloseHandle(hSession);
	}
	return bRet;
}

HGLOBAL WINAPI PL_ReadDataFromFile(CString strFile)
{
	HGLOBAL hData = NULL;
	CFile file;
	if(file.Open(strFile, CFile::modeRead))
	{
		int nLen = file.GetLength();
		hData = ::GlobalAlloc(GHND, nLen);
		if(hData != NULL)
		{
			LPVOID lpData = ::GlobalLock(hData);
			file.ReadHuge(lpData, nLen);
			GlobalUnlock(hData);
		}
		file.Close();
	}
	return hData;
}

BOOL WINAPI PL_WriteDataToFile(CString strFile, HGLOBAL hData)
{
	BOOL bRet = FALSE;
	CFile file;
	if(file.Open(strFile, CFile::modeCreate | CFile::modeWrite))
	{
		if(hData != NULL)
		{
			int nLen = ::GlobalSize(hData);
			LPVOID lpData = ::GlobalLock(hData);
			file.WriteHuge(lpData, nLen);
			GlobalUnlock(hData);
			bRet = TRUE;
		}
		file.Close();
	}
	return bRet;
}

⌨️ 快捷键说明

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