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

📄 socketthread.cpp

📁 这是个soket的代码不是太实用但是对出学者还是有些帮助的 有需要的可以
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int)*2);
		}
	case PL_MOUSE_MOVE://鼠标移动
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			::PL_MouseMove(point);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_LBUTTONDOWN://鼠标左键按下
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseLButtonDown(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_LBUTTONUP://鼠标左键弹起
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseLButtonUp(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_RBUTTONDOWN://鼠标右键按下
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseRButtonDown(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_RBUTTONUP://鼠标右键弹起
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseRButtonUp(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_LDBLCLK://鼠标左键双击
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseLButtonDblClk(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_MOUSE_RDBLCLK://鼠标右键双击
		{
			POINT point;
			point.x = *((int *)(chData+1));
			point.y = *((int *)(chData+1+sizeof(int)));
			BOOL bMouseMove = *((BOOL*)(chData+1+sizeof(int)*2));
			bMouseMove = !!bMouseMove;
			::PL_MouseRButtonDblClk(point, bMouseMove);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_KEY_DOWN://一个键被按下
		{
			UINT uChar = *((UINT *)(chData+1));
			UINT uFlag = *((UINT *)(chData+sizeof(UINT)+1));
			::PL_KeyDown(uChar, uFlag);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_KEY_UP://一个键被弹起
		{
			UINT uChar = *((UINT *)(chData+1));
			UINT uFlag = *((UINT *)(chData+sizeof(UINT)+1));
			::PL_KeyUp(uChar, uFlag);
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
		}
		break ;
	case PL_FUNC_EXEC://执行一条命令,使用了线程
		{
			g_strAString.Format(_T("%s"), chData+1);
			if(g_pWaitCommandThread != NULL)
			{
				::TerminateThread(g_pWaitCommandThread->m_hThread, 0);
				::WaitForSingleObject(g_pWaitCommandThread->m_hThread, INFINITE);
				g_pWaitCommandThread = NULL;
			}
			g_pWaitCommandThread = AfxBeginThread(WaitCommandThread, (LPVOID)PL_FUNC_EXEC);
		}
		break ;
	case PL_FUNC_LOCK://锁定桌面
		{
			BOOL bLock = *((BOOL*)(chData+1));
			::PL_LockDesktop(!!bLock);
		}
		break ;
	case PL_FUNC_EXITWIN://关机/重启/注销
		{
			UINT uFlag = *((UINT *)(chData+1));
			::PL_ExitWindow(uFlag);
		}
		break ;
	case PL_FUNC_CTRL_ALT_DEL://热启动,暂且不行
		{
			::PL_Send_CtrlAltDel();
		}
		break ;
	case PL_FUNC_FILE_COPY_S://传送文件
		{
			char chFile[255];
			ZeroMemory(chFile, 255);
			sprintf(chFile, "%s", chData+1);
			BYTE chTemp[10];
			ZeroMemory(chTemp, 10);
			int nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 10);
			if(nRet > 0)
			{
				nRet = ::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
				g_nAInt = *((int*)(chTemp));
				g_strAString.Format(_T("%s"), chFile);
				if(g_pWaitCommandThread != NULL)
				{
					::TerminateThread(g_pWaitCommandThread->m_hThread, 0);
					::WaitForSingleObject(g_pWaitCommandThread->m_hThread, INFINITE);
					g_pWaitCommandThread = NULL;
				}
				g_pWaitCommandThread = AfxBeginThread(WaitCommandThread, 
					(LPVOID)PL_FUNC_FILE_COPY_S);
			}
		}
		break ;
	case PL_FUNC_FILE_COPY_C:
		{
			char chFile[255];
			ZeroMemory(chFile, 255);
			sprintf(chFile, "%s", chData+1);
			BYTE chTemp[10];
			ZeroMemory(chTemp, 10);
			int nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 10);
			if(nRet > 0)
			{
				nRet = ::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP);
				g_nAInt = *((int*)(chTemp));
				g_strAString.Format(_T("%s"), chFile);
				if(g_pWaitCommandThread != NULL)
				{
					::TerminateThread(g_pWaitCommandThread->m_hThread, 0);
					::WaitForSingleObject(g_pWaitCommandThread->m_hThread, INFINITE);
					g_pWaitCommandThread = NULL;
				}
				g_pWaitCommandThread = AfxBeginThread(WaitCommandThread, 
					(LPVOID)PL_FUNC_FILE_COPY_C);
			}
		}
		break ;
	case PL_FUNC_FILE_DELETE:
		{
			char chFile[255];
			ZeroMemory(chFile, 255);
			sprintf(chFile, "%s", chData+1);
			BOOL bRet = ::PL_DeleteFile(chFile);
			ZeroMemory(chFile, 255);
			memcpy(chFile, &bRet, sizeof(BOOL));
			::PL_SendSocketData(m_sckClient[0], (BYTE*)chFile, sizeof(BOOL), PL_RETURN_BOOL);
		}
		break ;
	case PL_FUNC_FILE_MOVE:
		{
			char chSrcFile[255];
			ZeroMemory(chSrcFile, 255);
			sprintf(chSrcFile, "%s", chData+1);
			char chDesFile[255];
			ZeroMemory(chDesFile, 255);
			nRet = ::PL_ReadSocketData(m_sckClient[0], (BYTE*)chDesFile, 255, NULL);
			if(nRet >  0)
			{
				BOOL bRet = ::PL_MoveFile(chSrcFile, chDesFile);
				ZeroMemory(chSrcFile, 255);
				memcpy(chSrcFile, &bRet, sizeof(BOOL));
				::PL_SendSocketData(m_sckClient[0], (BYTE*)chSrcFile, 
					sizeof(BOOL), PL_RETURN_BOOL);
			}
		}
		break ;
	default :
		break ;
	}
	return nRet;
}

BOOL CSocketThread::CreateServer()
{
	BOOL bRet = FALSE;
	bRet = ::PL_InitSocket();
	if(!bRet)
	{
		return bRet;
	}

	char chName[256];
	sockaddr_in addr;
	hostent* pEnt = NULL;
	int addrlen = 0, nRet = 0;
	
	nRet = ::gethostname(chName, 256);
	if(nRet == 0)
	{
		m_sckServer = socket(AF_INET, SOCK_STREAM, 0);
		if(m_sckServer != INVALID_SOCKET)
		{
			pEnt = ::gethostbyname(chName);
			if(pEnt)
			{
				addr.sin_family = AF_INET;
				addr.sin_port = htons(m_uPort);
				addr.sin_addr.s_addr = INADDR_ANY;

				nRet = ::bind(m_sckServer, (sockaddr*)&addr, sizeof(addr));
				
				if(nRet != SOCKET_ERROR)
				{
					nRet = ::listen(m_sckServer, SOMAXCONN);
					if(nRet != SOCKET_ERROR)
					{
						addrlen = sizeof(addr);
						TRACE(_T("开始了服务,等待客户......\n"));
						m_sckClient[0] = ::accept(m_sckServer, (sockaddr*)&addr, &addrlen);
						if(m_sckClient[0] != INVALID_SOCKET)
						{
							//为了同步
							::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_TEMP, MSG_OOB);
						}
						m_sckClient[1] = ::accept(m_sckServer, (sockaddr*)&addr, &addrlen);
						if(m_sckClient[0] != INVALID_SOCKET &&
						   m_sckClient[1] != INVALID_SOCKET)
						{
							TRACE(_T("客户连接上了.......\n"));
							char chTemp[256];
							ZeroMemory(chTemp, 256);
							sockaddr_in name1;
							sockaddr_in name2;
							int nSize = sizeof(sockaddr_in);
							int nRet1 = ::getpeername(m_sckClient[0], (sockaddr*)&name1, &nSize);
							int nRet2 = ::getpeername(m_sckClient[1], (sockaddr*)&name2, &nSize);
							if(nRet1 == 0 && nRet2 == 0)
							{
sprintf(chTemp, "Connect is OK.\r\nServer Computer Name:%s,IP:%d.%d.%d.%d,Port:%d.\r\nClient[0]:IP=%d.%d.%d.%d  Port=%d.\r\nClient[1]:IP=%d.%d.%d.%d  Port=%d.",
									chName,
									(unsigned char)(pEnt->h_addr_list[0][0]),
									(unsigned char)(pEnt->h_addr_list[0][1]),
									(unsigned char)(pEnt->h_addr_list[0][2]),
									(unsigned char)(pEnt->h_addr_list[0][3]),
									m_uPort,
									name1.sin_addr.S_un.S_un_b.s_b1,
									name1.sin_addr.S_un.S_un_b.s_b2,
									name1.sin_addr.S_un.S_un_b.s_b3,
									name1.sin_addr.S_un.S_un_b.s_b4,
									name1.sin_port,
									name2.sin_addr.S_un.S_un_b.s_b1,
									name2.sin_addr.S_un.S_un_b.s_b2,
									name2.sin_addr.S_un.S_un_b.s_b3,
									name2.sin_addr.S_un.S_un_b.s_b4,
									name2.sin_port);
							}
							else
							{
								strcpy(chTemp, "Connect is OK.");
							}
							
							nRet = ::PL_SendSocketData(m_sckClient[0], (BYTE *)chTemp, strlen(chTemp)+1, MSG_OOB);
							bRet = TRUE;
						}
					}
				}
			}
		}
	}

	return bRet;
}

BOOL CSocketThread::ExitServer()
{
	TRACE(_T("退出服务,重新等待连接......\n"));
	if(g_pSendDIBThread != NULL)
	{
		::TerminateThread(g_pSendDIBThread->m_hThread, 0);
		::WaitForSingleObject(g_pSendDIBThread->m_hThread, INFINITE);
		g_pSendDIBThread = NULL;
	}

	if(g_pWaitCommandThread != NULL)
	{
		::TerminateThread(g_pWaitCommandThread->m_hThread, 0);
		::WaitForSingleObject(g_pWaitCommandThread->m_hThread, INFINITE);
		g_pWaitCommandThread = NULL;
	}

	if(m_sckClient[0] != INVALID_SOCKET)
	{
		::closesocket(m_sckClient[0]);
	}
	if(m_sckClient[1] != INVALID_SOCKET)
	{
		::closesocket(m_sckClient[1]);
	}
	if(m_sckServer != INVALID_SOCKET)
	{
		::closesocket(m_sckServer);
	}
	m_sckClient[0] = INVALID_SOCKET;
	m_sckClient[1] = INVALID_SOCKET;
	m_sckServer = INVALID_SOCKET;

	return TRUE;
}

⌨️ 快捷键说明

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