📄 socketthread.cpp
字号:
::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 + -