基本框架图:
举例:(远程控制软件的服务器代码框架)
// FileNetServer.cpp : Defines the entry point for the console application. // #include <winsock.h> #include <windows.h> #define BUF_LEN 1024 #define CHUNK_SIZE (64*1024) #define GetDriver 0x01 #define GetDirInfo 0x02 #define ExecFile 0x03 #define GetFile 0x04 #define PutFile 0x05 #define DelFile 0x06 #define DelDir 0x07 #define CreateDir 0x08 #define FileInfo 0x09 #define GetScreen 0x10 #pragma comment(lib, "ws2_32") #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif typedef struct { int ID; BYTE lparam[BUF_LEN*2]; }COMMAND; /*BOOL 4byte HICON 4byte*/ typedef struct { char FileName[MAX_PATH];//260byte int FileLen; char Time[50]; BOOL IsDir; BOOL Error; HICON hIcon; }FILEINFO; BOOL DeleteDirectory(char *DirName); BOOL CapScreen(LPTSTR FileName); DWORD WINAPI SLisen(LPVOID lparam); DWORD GetDriverProc(COMMAND command, SOCKET client); DWORD GetDirInfoProc(COMMAND command, SOCKET client); DWORD ExecFileProc(COMMAND command, SOCKET client); DWORD DelFileProc(COMMAND command, SOCKET client); DWORD FileInfoProc(COMMAND command, SOCKET client); DWORD CreateDirProc(COMMAND command, SOCKET client); DWORD DelDirProc(COMMAND command, SOCKET client); DWORD GetFileProc(COMMAND command, SOCKET client); DWORD PutFileProc(COMMAND command, SOCKET client); DWORD GetScreenProc(COMMAND command, SOCKET client); ///////////////////////////////////////////////////////////////////////////// // The one and only application object CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { WSADATA wsadata; SOCKET FileNetServer; SOCKET client; SOCKADDR_IN FileNetServeraddr; SOCKADDR_IN clientaddr; int port = 17329; WORD ver = MAKEWORD(2,2); WSAStartup(ver, &wsadata); FileNetServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); FileNetServeraddr.sin_family = AF_INET; FileNetServeraddr.sin_port = htons(port); FileNetServeraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind(FileNetServer, (SOCKADDR*)&FileNetServeraddr, sizeof(FileNetServeraddr)); listen(FileNetServer, 5); int len = sizeof(clientaddr); char s_password[100]; while(true) { if(client = accept(FileNetServer, (sockaddr*)&clientaddr, &len)) { if(send(client, "Password", sizeof("Password"), 0) != SOCKET_ERROR) { cout<<"有客户请求连接,正在等待客户输入密码!"; } ag: if(recv(client, s_password, sizeof(s_password), 0) != SOCKET_ERROR) { if(strcmp(s_password, "123") == 0) { send(client, "OK", sizeof("OK"), 0); cout<<"CreateThread is the OK \n"; CreateThread(NULL, NULL, SLisen, (LPVOID)client, NULL, NULL); } else { cout<<"有用户试图联入,但是未能输入正确密码!/n"; send(client, "NOOK", sizeof("NOOK"), 0); goto ag; } } } } closesocket(FileNetServer); closesocket(client); WSACleanup(); return 0; } DWORD WINAPI SLisen(LPVOID lparam) { SOCKET client = (SOCKET)lparam; COMMAND command; while(1) { memset((char*)&command, 0, sizeof(command)); if(recv(client, (char*)&command, sizeof(command), 0) == SOCKET_ERROR) { cout<<"The Client Socket is Closed\n"; break; } else { cout<<"The recv command is: ID="<<command.ID<<" lparam="<<command.lparam<<endl; switch(command.ID) { case GetDriver: GetDriverProc(command, client); break; case GetDirInfo: GetDirInfoProc(command, client); break; case ExecFile: ExecFileProc(command, client); break; case DelFile: DelFileProc(command, client); break; case FileInfo: FileInfoProc(command, client); break; case CreateDir: CreateDirProc(command, client); break; case DelDir: DelDirProc(command, client); break; case GetFile: GetFileProc(command, client); break; case PutFile: PutFileProc(command, client); break; case GetScreen: GetScreenProc(command, client); break; default: cout<<"Can not recongnize the command!\n"; break; } } } closesocket(client); return 0; } DWORD GetDriverProc(COMMAND command, SOCKET client) { cout<<"GetDriver is ok\n"; COMMAND cmd; memset((char *)&cmd, 0, sizeof(cmd)); cmd.ID = GetDriver; for(char i='A'; i<'Z'; i++) { char x[20] = {i, ':'}; UINT Type = GetDriveType(x); if(Type==DRIVE_FIXED || Type==DRIVE_REMOVABLE || Type==DRIVE_CDROM) { cout<<x<<"\n"; memset((char*)cmd.lparam, 0, sizeof(cmd.lparam)); strcpy((char*)cmd.lparam, x); if(send(client, (char*)&cmd, sizeof(cmd), 0) == SOCKET_ERROR) { cout<<"Send Driver is Error\n"; } } } return 0; } DWORD GetDirInfoProc(COMMAND command, SOCKET client) { } DWORD ExecFileProc(COMMAND command, SOCKET client) { } DWORD DelFileProc(COMMAND command, SOCKET client) { } DWORD FileInfoProc(COMMAND command, SOCKET client) { } DWORD CreateDirProc(COMMAND command, SOCKET client) { } DWORD DelDirProc(COMMAND command, SOCKET client) { } BOOL DeleteDirectory(char *DirName) { } DWORD GetFileProc(COMMAND command, SOCKET client) { } DWORD PutFileProc(COMMAND command, SOCKET client) { return 0; } DWORD GetScreenProc(COMMAND command, SOCKET client) { return 0; } BOOL CapScreen(LPTSTR FileName) { return 0; }
整个工程的源代码下载地址:http://download.csdn.net/detail/nuptboyzhb/4590088