📄 server.cpp
字号:
// Server.cpp
//
#include "resource.h"
#include "windows.h"
#include <tlhelp32.h>
#define WM_SOCKET WM_USER+3
MSG msg;
WSADATA wsaData;
WORD WSAEvent;
DWORD currentsock;
char buffer[8192];
char buff[64];
int RDbytes;
LPSTR CurChar;
LPSTR BufChar;
HWND hMain;
HWND hADRS,hADRD;
PROCESSENTRY32 pe32;
MODULEENTRY32 mod;
HANDLE hProcessSnap;
int i,a;
SOCKET listen_Sock;
SOCKET sendsock;
SOCKADDR_IN addr_Sock;
PHOSTENT pHost;
SYSTEMTIME SysTime;
HINSTANCE hInst;
HICON mainIcon;
BOOL CALLBACK MainDlg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
hInst=hInstance;
hMain = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL, MainDlg);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
return 0;
}
void Disconnected(void)
{
GetLocalTime(&SysTime);
wsprintf (
buffer,"Disconnected at: %d:%d:%d",
SysTime.wHour,
SysTime.wMinute,
SysTime.wSecond
);
SetDlgItemText(hMain,IDC_ADDR,buffer);
}
void Connected(void)
{
GetLocalTime(&SysTime);
wsprintf (
buffer,"Connected: %d.%d.%d.%d at %d:%d:%d",
addr_Sock.sin_addr.S_un.S_un_b.s_b1,
addr_Sock.sin_addr.S_un.S_un_b.s_b2,
addr_Sock.sin_addr.S_un.S_un_b.s_b3,
addr_Sock.sin_addr.S_un.S_un_b.s_b4,
SysTime.wHour,
SysTime.wMinute,
SysTime.wSecond);
SetDlgItemText(hMain,IDC_ADDR,buffer);
}
void SendBytes(int Size)
{
buffer[0]=LOBYTE(Size);
buffer[1]=HIBYTE(Size);
send(currentsock,buffer,2,0);
if (Size) send(currentsock,2+buffer,Size,0);
}
BOOL CALLBACK MainDlg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_INITDIALOG:
{
mainIcon=LoadIcon (hInst,MAKEINTRESOURCE(IDI_MAIN));
SetClassLong(hwnd, GCL_HICON, (LONG)mainIcon );
WSAStartup (MAKEWORD(2,2), &wsaData);
listen_Sock = socket(AF_INET,SOCK_STREAM,0);
addr_Sock.sin_family = AF_INET;
addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY);
addr_Sock.sin_port = htons(333);
bind(listen_Sock,(LPSOCKADDR)&addr_Sock, sizeof(struct sockaddr));
int err=listen(listen_Sock, 1);
wsprintf (buffer,"%d",err);
SetDlgItemText(hwnd,IDC_ADDR,buffer);
WSAAsyncSelect(listen_Sock, hwnd,WM_SOCKET, FD_ACCEPT|FD_READ|FD_CLOSE);
break;
}
case WM_SOCKET:
{
currentsock = wParam;
WSAEvent = WSAGETSELECTEVENT (lParam);
switch (WSAEvent)
{
case FD_CLOSE :
Disconnected();
CheckDlgButton(hwnd,IDC_CONN,FALSE);
closesocket(currentsock);
return 0;
break;
case FD_READ:
RDbytes=recv(currentsock, buffer, 1, 0);
buffer[1]=0;
SetDlgItemText(hwnd,IDC_ADDR,buffer);
switch (buffer[0])
{
case 'P':
{
hProcessSnap=CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof (pe32);
BufChar=(char *)&buffer+2;
a=Process32First (hProcessSnap, &pe32);
while (a!=0)
{
a=lstrlen(pe32.szExeFile);
CurChar=pe32.szExeFile+a;
for (i=0;i<a;i++)
{
if (*CurChar == '\\') {CurChar++;break;}
CurChar--;
}
a=lstrlen(CurChar);
lstrcpy((char*)BufChar, (char*)CurChar);
BufChar+=a+1;
*(LONG*)BufChar=pe32.th32ProcessID;
BufChar+=4;
a=Process32Next (hProcessSnap, &pe32);
}
CloseHandle (hProcessSnap);
*BufChar=0;
BufChar++;
*BufChar=0;
BufChar++;
SendBytes(BufChar-(char *)&buffer-2);
break;
}
case 'S':
{
HANDLE img_File = CreateFile("portr.jpg", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (img_File!=INVALID_HANDLE_VALUE)
{
int ImageSize = GetFileSize(img_File, NULL);
//if (ImageSize == 0xFFFFFFFF) return;
ULONG ii;
ReadFile(img_File, buffer+2, ImageSize, &ii, NULL);
CloseHandle(img_File);
SendBytes(ImageSize);
}
else
{
SendBytes(0);
}
break;
}
}
return 0;
break;
case FD_ACCEPT:
a = sizeof(addr_Sock);
sendsock=accept(currentsock,(struct sockaddr FAR *) &addr_Sock,(int FAR *) &a );
Connected();
CheckDlgButton(hwnd,IDC_CONN,TRUE);
return 0;
break;
}
break;
}
case WM_CLOSE:
{
if (sendsock) {closesocket(sendsock);sendsock=0;}
closesocket(listen_Sock);
WSACleanup();
EndDialog(hwnd,0);
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
{
closesocket(listen_Sock);
if (sendsock) {closesocket(sendsock);sendsock=0;}
WSACleanup();
EndDialog(hwnd,0);
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
}
}
}
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -