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

📄 server.cpp

📁 Example of network programing. This example shows how to sent information (file, task (process) list
💻 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 + -