欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

《网络程序设计》报告

  • 资源ID:28510507       资源大小:205.50KB        全文页数:25页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

《网络程序设计》报告

一、 课题描述1.任务内容基于Windows的远程控制软件开发毕业设计的主要任务是要求做出从系统角度设计的远程控制模式,并制作相应实用软件。采用服务器(Server),客户端(Client)模式,使用Socket编程的基本原理及Windows的消息系统。实现基本的远程控制要求,界面新颖友好。用VC开发!要求: 1)远程控制模式架构,如基于主从模式; 2)远程控制功能实现,如开关机,远程监视; 3)远程控制安全考虑; 4)远程控制实现平台与技巧; 5)远程控制软件实现,要求至少能在两台电脑上正常运行; 6)界面新颖友好。2. 应完成内容1),查看被控制端的文件目录清单;2),查看被控制端的文件内容;3),拷贝被控制端的文件到控制端;4),强迫被控制端重新启动或关机;5),修改被控制端的系统配置文件;6),直接执行任何可执行命令,打开应用程序;7),锁住(解锁)被控制端的屏幕,键盘和鼠标;8),控制被控制端的屏幕,在本地直接操作被控制端计算机;9),隐藏共享被控制端的硬盘;10),同时可以做到被控端的服务器自动运行及隐藏等功能;11),补充:做不好的话,会带来严重的安全隐患。会给一些居心不良的人留下后面。所以要同时做好相关的安全性考虑。二、 系统分析1. 系统功能分析本程序是由客户端和服务器端两部分组成的。而且需要客户端和服务器端同时运行相应的程序来实现的。本软件要实现的基本功能可以简化如下: 第一步,服务器端运行相应的远程控制软件服务器程序,使服务器端的某个端口处于监听状态(本软件端口设置为4069)。这样服务器端计算机就时刻处于监听远程计算机连接请求的状态。 第二步,当服务器端程序运行后,客户端在本地计算机中运行相应程序的客户端程序,运行这个客户端程序时,会指定一个要连接的服务器的IP地址和端口,(本软件初始化的服务器地址是192.168.0.6,端口:4069),程序运行后,点击连接就会向所有的网络搜索指定的计算机了。 第三步,搜索到所指定的计算机后,客户端计算机就向服务器端指定的端口发送连接请求(本软件使用TCP连接),如果服务器端计算机同一端口处于监听状态,则服务器端接收客户端的连接请求,并根据设定的值向客户端发送接受请求确认信号,并同时向客户端发出登录成功信息确认对话框。 第四步,客户端输入登录信息并确认后,就会向服务器端发送,服务器端接收到客户端发来的用户信息后,就开始对客户端所输入的客户进行合法性确认,如果不符合登录条件,则拒绝用户的连接。 第五步,如果服务器端确认客户端所输入的用户符合服务器端计算机的条件,则服务器端允许客户端进行进一步的连接,这样,整个软件的连接过程就完成了。2.系统软件模型 在本软件设计中,采用典型的C/S结构,由客户端与服务端两部分构成。客户/服务器模式的最显著特点是非对等作用,即客户相对于服务器处于不平等的地位,服务端提供服务,客户端提供请求。 在设计客户端和服务器时,由于功能需求不同,我设计的客户端界面简单,面向对象,并且由相应的帮助文件,易于操作。而服务器端主要实现控制功能实现。而且不能让用户强行关闭,界面就简单,而且要做到隐藏。其他详细的功能模块描述将在第四章具体功能模块实现中给予描述。以下两章详细介绍了本程序的实现的基础和过程:三、C/S模式远程控制程序设计实现1客户端(监控端)设计 相对服务器端(受控端)的设计,客户端较为简单。客户端设计是,选用了MFC ApWizard(EXE),的基本对话框。在窗口上添加一些控件。修改相应的编辑框属性。添加相应的成员变量。从图4.2.1可以清楚的看到,在未登录服务器之前,注销,直接控屏和发送按钮以及要发送的命令的Edit窗口都是Disable的,同时,本软件设置了一个信息显示窗口,用来接收服务器端发回来的反馈消息。在软件运行前,会先运行一个提示注册的窗口。主界面如图4.1所示: 图4.12服务器端(被监控端)程序设计 被控端程序是远程控制软件的主体。远程控制软件的具体功能都是再被控制端实现的,主控端只负责传送要执行的命令和显示返回的结果。而几乎所有的操作控制都时在被控端本地实现的。远程控制的被控端要求自动运行,同时还应该要具有一定的隐藏性,不容易被客户端用户发现和关闭,当然,这要在Window任务管理器里看不到。故界面简单,并且自动改成和系统配置中的名称相近的名称。这样才不容易被客户端用户发现。 在设计被控端的实现过程中,新建一个项目,“MFC AppWizard(exe)”,选择“单文档界面”,取名Server。套用Windows Sockets,由于服务器端基本功能都是在serverView中实现的,所以,可以把除了“文件”项以外的项全删除。 在实现服务器设计时,在初始化Window Socket时,通过指定 m_pMainWnd->ShowWindow(SW_HIDE);使程序的主界面不显示。在Server.cpp里声明并定义自动运行函数Regis()和隐藏进程函数Hideproc();在ServerDoc.cpp里定义默认端口。其他主要功能模块都是在ServerView.cpp中实现的。本程序主要实现了九个功能,具体实现步骤如下: 本程序流程图如图4.7所示: 3客户端和服务器端交互方式的实现如图4.10所示:(已经建立连接)4、其他功能的实现: 其他功能,如锁住屏幕和屏幕解锁通过调用EnableWindow()函数可以很简单的实现,如锁住屏幕,只需要先得到系统当前的信息,然后 EnableWindow(GetDesktopWindow(),FALSE),就可以实现了,当要解除锁屏时,只需要再执行上面的函数,把参数“FALSE”改为“TRUE”就可以了。 本程序的功能模块中还有一个功能模块叫做“使硬盘隐形共享”,该功能模块可以共享指定的盘,同时,能够使受控端用户不能在资源管理器中发现已经共享的盘号。实现该功能模块主要是通过修改注册表来实现的。在注册表中,存储硬盘号信息的注册表路径为: “SoftwareMicrosoftWindowsCurrentVersionNetwordLanMan”,只要获取这条路径,在加上查找要共享的盘符通过创建一个注册表新键值,并且将键值做相应的修改就可以实现了。具体实现源代码可见附录的,CServerView:MyShare();5、代码a.客户端主要功能实现源代码:int CClientDlg:OnScreen() /直接控屏/ TODO: Add your control notification handler code hereHINSTANCE m_hInstance=AfxGetInstanceHandle();m_csSend="scr"UpdateData(FALSE);OnSend();LoadString(m_hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);LoadString(m_hInstance,IDC_SOCKSEVER,szWindowClass,MAX_LOADSTRING);MyRegisterClass(m_hInstance);/屏幕窗口初始化if (!myInitInstance(m_hInstance)return FALSE;return TRUE;/-/屏幕控制窗口类ATOM MyRegisterClass(HINSTANCE hInstance)WNDCLASSEX wcex;/指定类参数wcex.cbSize=sizeof(WNDCLASSEX);/窗口风格wcex.style=CS_HREDRAW|CS_VREDRAW;/消息处理函数wcex.lpfnWndProc=(WNDPROC)WndProc;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;/窗口图标wcex.hIcon=LoadIcon(hInstance,(LPCTSTR)IDR_MAINFRAME);wcex.hCursor=LoadCursor(NULL,IDC_ARROW);/背景颜色wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);/不带菜单wcex.lpszMenuName=NULL;wcex.lpszClassName=szWindowClass;wcex.hIconSm=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);return RegisterClassEx(&wcex);/-/创建屏幕控制窗口,并初始化套接字BOOL myInitInstance(HINSTANCE hInstance)HWND hWnd;hInst=hInstance;hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL); if (!hWnd) return FALSE; SyshWnd=hWnd; /正常方式显示窗口 ShowWindow(hWnd,SW_SHOW); UpdateWindow(hWnd); if(!IniSock(SyshWnd) MessageBox(0,"套接字连接错误!","远程控制",MB_OK|MB_APPLMODAL); return TRUE;/-/消息处理函数LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)int wmId,wmEvent;switch(message)case WM_COMMAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);return DefWindowProc(hWnd,message,wParam,lParam);break; case WM_DESTROY:closesocket(ServerSock);CONNECT=FALSE;break;case WM_MOUSEMOVE:if(CONNECT&&MouseEventFlag)MouseEvent(US_MOUSEMOVE,hWnd);break; case WM_LBUTTONDOWN:if (CONNECT&&MouseEventFlag)MouseEvent(US_MOUSELD,hWnd);break; case WM_LBUTTONUP:if(CONNECT&&MouseEventFlag)MouseEvent(US_MOUSELU,hWnd);break; case WM_RBUTTONDOWN:if(CONNECT&&MouseEventFlag)MouseEvent(US_MOUSERD,hWnd);break; case WM_RBUTTONUP:if(CONNECT&&MouseEventFlag)MouseEvent(US_MOUSERU,hWnd);break; case WM_TIMER:if(CONNECT&&BitFlag)BitFlag=false;DibEvent(hWnd);BitFlag=true;default:return DefWindowProc(hWnd,message,wParam,lParam);return 0;/-/初始化套接字BOOL IniSock(HWND hWnd)WORD wVersionrequested;WSADATA wsaData;wVersionrequested=MAKEWORD(2,0);int err=WSAStartup(wVersionrequested,&wsaData);if(err=-1)MessageBox(0,"套接字初始化错误!","远程控制",MB_OK|MB_APPLMODAL); return FALSE;CONNECT=TRUE;/设置计时器 SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);return TRUE;/-/连接套接字BOOL ConnectSock()int msgsock;/分配套接字ServerSock=socket(AF_INET,SOCK_STREAM,0);if(ServerSock<0)MessageBox(0,"套接字初始化错误!","远程控制",MB_OK|MB_APPLMODAL);return FALSE;/开始连接server.sin_family=PF_INET;server.sin_port=htons(4096);server.sin_addr.s_addr=inet_addr(m_csIP);msgsock=connect(ServerSock,(struct sockaddr*)&server,sizeof(server);if(msgsock!=0)return FALSE;return TRUE;/-void SendMousePoint(HWND hWnd)POINT point,point1;RECT rect;HDC hdc;long x,y;float fx,fy;int ClientWidth,ClientHeight;/获得窗口的高度和宽度recv(ServerSock,(char*)&ClientWidth,sizeof(ClientWidth)+1,0);recv(ServerSock,(char*)&ClientHeight,sizeof(ClientHeight)+1,0);/获取鼠标位置GetCursorPos(&point);hdc=GetDC(hWnd);GetDCOrgEx(hdc,&point1);point.x=point.x-point1.x;point.y=point.y-point1.y;GetClientRect(hWnd,&rect);fx=(float)point.x;fy=(float)point.y;fx=fx*ClientWidth/rect.right;fy=fy*ClientHeight/rect.bottom;point.x=(long)fx;point.y=(long)fy;x=point.x;y=point.y;/发送鼠标位置send(ServerSock,(char*)&x,sizeof(x)+1,MSG_OOB);send(ServerSock,(char*)&y,sizeof(y)+1,MSG_OOB);/-/鼠标事件处理void MouseEvent(int Msg,HWND hWnd)int Flag;/连接套接字CONNECT=ConnectSock();if(!CONNECT)MessageBox(0,"套接字连接错误!","远程控制",MB_OK|MB_APPLMODAL);/recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);if(Flag=US_FLAG)/发送鼠标移动信息send(ServerSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);SendMousePoint(hWnd);/-/位图处理函数void DibEvent(HWND hWnd)int Flag,Msg;int BitWidth,BitHeight;RECT rect;CONNECT=ConnectSock();if(!CONNECT)MessageBox(0,"套接字连接错误!","远程控制",MB_OK|MB_APPLMODAL);/获得窗口的高度和宽度GetWindowRect(hWnd,&rect);BitWidth=rect.right-rect.left;BitHeight=rect.bottom-rect.top;recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);if(Flag=US_FLAG)MouseEventFlag=false;/fasongxinxiMsg=US_DESKTOPBIT;send(ServerSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);send(ServerSock,(char*)&BitWidth,sizeof(Msg)+1,MSG_OOB);send(ServerSock,(char*)&BitHeight,sizeof(Msg)+1,MSG_OOB);GetDesktopBit(hWnd);MouseEventFlag=true;closesocket(ServerSock);/-/系统事件处理void SysEvent(int Msg,HWND hWnd)int Flag;CONNECT=ConnectSock();if(!CONNECT)MessageBox(0,"套接字连接错误!","远程控制",MB_OK|MB_APPLMODAL); recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);if(Flag=US_FLAG)send(ServerSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);/-/获取桌面,转换成位图void GetDesktopBit(HWND hWnd)char *buf;buf=new charUS_MAXSIZE;int len;int Flag;DWORD bitSize;HDC hdc;HANDLE hDib;RECT rect;BYTE *p,*p1;Flag=US_DIBFLAG;recv(ServerSock,(char*)&bitSize,sizeof(bitSize)+1,0);send(ServerSock,(char*)&Flag,sizeof(Flag)+1,MSG_OOB);/为位图分配内存hDib=GlobalAlloc(GMEM_MOVEABLE,bitSize);p=(LPBYTE)GlobalLock(hDib);p1=p;for(WORD i=0;i<bitSize/US_MAXSIZE;i+)len=recv(ServerSock,buf,US_MAXSIZE,0);CopyMemory(p1,buf,US_MAXSIZE);p1=p1+US_MAXSIZE;send(ServerSock,(char*)&Flag,sizeof(Flag)+1,MSG_OOB);if(bitSize%US_MAXSIZE)len=recv(ServerSock,buf,bitSize%US_MAXSIZE,0);CopyMemory(p1,buf,len);p1=p1+bitSize%US_MAXSIZE;send(ServerSock,(char*)&Flag,sizeof(Flag)+1,MSG_OOB);p1=p1-bitSize;hdc=GetDC(hWnd);GetClientRect(hWnd,&rect);int color=(1<<(LPBITMAPINFOHEADER)p1)->biBitCount);if(color>256)color=0;StretchDIBits(hdc,0,0,rect.right,rect.bottom,0,0, (LPBITMAPINFOHEADER)p)->biWidth, (LPBITMAPINFOHEADER)p)->biHeight, (LPBYTE)p+(sizeof(BITMAPINFOHEADER)+color*sizeof(RGBQUAD), (LPBITMAPINFO)p,DIB_RGB_COLORS,SRCCOPY);/释放GlobalFree(hDib);ReleaseDC(hWnd,hdc);delete buf;b.服务器端主要功能实现源代码:/直接控屏int autorun()MSG msg;/初始化套接字if (!InISock()return 0;if(!ConnectSock()/连接套接字return 0;/接收数据while(true)if(!AcceptData()WSACleanup();exit(1);if(!GetData()if(!InISock()return 0;if(!ConnectSock()return 0;closesocket(NewSock);return msg.wParam;/-/初始化套接字BOOL InISock()int Status;WORD wMajorVersion,wMinorVersion;WORD wVersionReqd;WSADATA lpmyWSAData;wMajorVersion=MAJOR_VERSION;wMinorVersion=MINOR_VERSION;wVersionReqd=MAKEWORD(wMajorVersion,wMinorVersion);Status=WSAStartup(wVersionReqd,&lpmyWSAData);if(Status!=0)return FALSE;return TRUE;/-/连接套接字BOOL ConnectSock()int Status;ClientSock=socket(AF_INET,SOCK_STREAM,0);if(ClientSock=INVALID_SOCKET)returnFALSE;dstclient_addr.sin_family=PF_INET;dstclient_addr.sin_port=htons(4069);dstclient_addr.sin_addr.s_addr=INADDR_ANY;Status=bind(ClientSock,(struct sockaddr far*)&dstclient_addr,sizeof(dstclient_addr);if(Status!=0)return FALSE;Status=listen(ClientSock,1);if(Status!=0)return FALSE;return TRUE;/-/接收数据BOOL AcceptData()int len=sizeof(dstclient_addr);NewSock=accept(ClientSock,(struct sockaddr far *)&dstclient_addr,&len);if(NewSock<0)closesocket(ClientSock);return FALSE; /获得分辨率SysWidth=GetSystemMetrics(SM_CXSCREEN);SysHeight=GetSystemMetrics(SM_CYSCREEN);return TRUE;/-/获取数据BOOL GetData()int iMsg,length;POINT point ;int FALG;FALG=US_FLAG;send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB);length=recv(NewSock,(char*)&iMsg,sizeof(iMsg)+1,0);if(length<0)closesocket(NewSock);closesocket(ClientSock);return FALSE;if(iMsg<4500)send(NewSock,(char *)&SysWidth,sizeof(SysWidth)+1,MSG_OOB); send(NewSock,(char *)&SysHeight,sizeof(SysWidth)+1,MSG_OOB);point =GetMousePoint();switch(iMsg)case US_DESKTOPBIT:SendDesktop();break; caseUS_MOUSEMOVE:MouseMove(point);break; case US_MOUSELD:MouseLD(point);break; caseUS_MOUSELU:MouseLU(point);break; case US_MOUSERD:MouseRD(point);break;case US_MOUSERU:MouseRU(point);break;return TRUE;/-/获得鼠标位置POINT GetMousePoint()int x,y;int lenx,leny;POINT point;lenx=recv(NewSock,(char *)&x,sizeof(x)+1,0);leny=recv(NewSock,(char *)&y,sizeof(y)+1,0);point.x=x;point.y=y;return point;/-/设置光标void MouseMove(POINT point)SetCursorPos(point.x,point.y);/-/鼠标左下移动void MouseLD(POINT point)mouse_event(MOUSEEVENTF_LEFTDOWN,point.x,point.y,0,0);/-/鼠标左上移动void MouseLU(POINT point)mouse_event(MOUSEEVENTF_LEFTUP,point.x,point.y,0,0);/-/鼠标YOU下移动void MouseRD(POINT point)mouse_event(MOUSEEVENTF_RIGHTDOWN,point.x,point.y,0,0);/-/鼠标youshang移动void MouseRU(POINT point)mouse_event(MOUSEEVENTF_RIGHTUP,point.x,point.y,0,0);/-/获得桌面图表HBITMAP GetSrcBit(DWORD BitWidth,DWORD BitHeight)HDC hdcmy,hbufferdc;HBITMAP hBit,hOldBitmap;hdcmy=CreateDC("DISPLAY",NULL,NULL,NULL);hbufferdc=CreateCompatibleDC(hdcmy);hBit=CreateCompatibleBitmap(hdcmy,BitWidth,BitHeight);hOldBitmap=(HBITMAP)SelectObject(hbufferdc,hBit);StretchBlt(hbufferdc,0,0,BitWidth,BitHeight,hdcmy,0,0,SysWidth,SysHeight,SRCCOPY);hBit=(HBITMAP)SelectObject(hbufferdc,hOldBitmap);DeleteObject(hOldBitmap);ReleaseDC(NULL,hdcmy);ReleaseDC(NULL,hbufferdc);return hBit; /-/发送桌面void SendDesktop() int BitMsg; LPBYTE plmagePoint; HANDLE hDib; HBITMAP hBit; int BitHeight,BitWidth; /获得桌面的高度 recv(NewSock,(char *)&BitWidth,sizeof(BitWidth)+1,0); recv(NewSock,(char *)&BitHeight,sizeof(BitHeight)+1,0); if(BitWidth>SysWidth) BitWidth=SysWidth; if(BitHeight>SysHeight) BitHeight=SysHeight; /转换为位图格式 hBit=GetSrcBit(BitWidth,BitHeight); hDib=DDBtoDIB(hBit); DWORD bitSize=GlobalSize(hDib); send(NewSock,(char *)&bitSize,sizeof(bitSize)+1,MSG_OOB); recv(NewSock,(char *)&BitMsg,sizeof(BitMsg)+1,0); plmagePoint=(LPBYTE)hDib; for(WORD i=0;i<bitSize/US_MAXSIZE;i+) send(NewSock,(char *)plmagePoint,sizeof(BYTE)*US_MAXSIZE,MSG_OOB);plmagePoint=plmagePoint+US_MAXSIZE;recv(NewSock,(char *)&BitMsg,sizeof(BitMsg)+1,0); if (bitSize%US_MAXSIZE) send(NewSock,(char *)plmagePoint,sizeof(BYTE)*GlobalSize(hDib)%US_MAXSIZE,MSG_OOB); recv(NewSock,(char *)&BitMsg,sizeof(BitMsg)+1,0); DeleteObject(hBit); GlobalFree(hDib);/-/图形转换HANDLE DDBtoDIB(HBITMAP bitmap)BITMAP bm;BITMAPINFOHEADER bi;LPBITMAPINFOHEADER lpbi;DWORD dwLen;HANDLE hDib;HANDLE handle;HDC hdc;HPALETTE hPal;hPal=(HPALETTE) GetStockObject(DEFAULT_PALETTE);/活动位图信息GetObject(bitmap,sizeof(bm),(LPSTR)&bm);/初始化位图头信息bi.biSize=sizeof(BITMAPINFOHEADER);bi.biWidth=bm.bmWidth;bi.biHeight=bm.bmHeight;bi.biPlanes=1;bi.biBitCount=4;bi.biCompression=BI_RGB;bi.biSizeImage=0;bi.biXPelsPerMeter=0;bi.biYPelsPerMeter=0;bi.biClrUsed=0;bi.biClrImportant=0;int ncolors=(1<<bi.biBitCount);if(ncolors>256)ncolors=0;dwLen=bi.biSize+ncolors*sizeof(RGBQUAD);hdc=GetDC(NULL);hPal=SelectPalette(hdc,hPal,FALSE);RealizePalette(hdc);hDib=GlobalAlloc(GMEM_FIXED,dwLen);if(!hDib)SelectPalette(hdc,hPal,FALSE);ReleaseDC(NULL,hdc);return NULL;lpbi=(LPBITMAPINFOHEADER)hDib;*lpbi=bi;GetDIBits(hdc,bitmap,0L,(DWORD)bi.biHeight,(LPBYTE)NULL,(LPBITMAPINFO)lpbi,(DWORD)DIB_RGB_COLORS);bi=*lpbi;if(bi.biSizeImage=0)bi.biSizeImage=(bi.biWidth*bi.biBitCount)+31)&31)/8)*bi.biHeight;dwLen+=bi.biSizeImage;if(handle=GlobalReAlloc(hDib,dwLen,GMEM_MOVEABLE)hDib=handle;elseGlobalFree(hDib);SelectPalette(hdc,hPal,FALSE);ReleaseDC(NULL,hdc);return NULL;lpbi=(LPBITMAPINFOHEADER)hDib;BOOL bgotbits=GetDIBits(hdc,bitmap,0L,(DWORD)bi.biHeight,(LPBYTE)lpbi+(bi.biSize+ncolors*sizeof(RGBQUAD),(LPBITMAPINFO)lpbi,(DWORD)DIB_RGB_COLORS);if(!bgotbits)GlobalFree(hDib);SelectPalette(hdc,hPal,FALSE);ReleaseDC(NULL,hdc);return NULL;SelectPalette(hdc,hPal,FALSE);ReleaseDC(NULL,hdc);return hDib;四、总结与展望 本论文在写作中设计到的技术,都尽量列出了函数原型,以帮助理解和应用。通过对本程序的设计、编程过程,让我加深了对所学过的课程计算机网络的了解,并且熟悉了网络编程的许多方面。同时,也加深了对系统的结构等方面的熟悉。熟悉了VC的网络编程。 本程序可以用于简单的计算机机房里的控制软件。 同时,本程序在直接控屏功能实现上还有一点问题,由于不管是被控端还是控制端发送和接受的都是位图,所以要求的数据量就比较大。本程序设计仅限于局域网内使用,故就没采用压缩算法,但是为了数据传输的时候时延小一点,就牺牲了图形的象素数,这就使直接控屏窗口的显示上很模糊,这有待于进一步改善。而且,在控制端对被控端的有些操作还不能完全实现,有待于进一步完善。 由于所学知识所限,基于广域网的远程控制还不能够有能力实现,但我想随着我对路由器,modem的知识的掌握,和对网络的协议了解的进一步加深,基于Internet的远程控制程序在不久也能够实现。五、参考文献1王达计算机网络远程控制 M北京:清华大学出版社,20032何牧泓轻松玩转远程控制M 重庆:重庆出版社,20023谢希仁计算机网络M大连:大连理工大学出版社,20004刘小辉网络管理M北京:人民邮电出版社,2002 5博嘉科技Visual C+6.0网络编程实作教程M北京:北京希望电子出版社,20016萨师煊等编.数据库系统概略M北京:高等教育出版社,20017李代平等编中文SQL Server 2000数据库应用开发M北京:冶金工业出版社,20028严蔚敏等编数据结构M北京:清华大学出版社,19979冯华Visual C+数据库开发技巧与实例M北京:机械工业出版社,200010张友生. 远程控制编程技术M北京:电子工业出版社,200211官章全 刘加明 编著 Visual C 6.0类库大全M北京:电子共有出版社,1999。12E.ComerComputer Networks and Internets(M)Beijing:Tsinghua University Press,2002

注意事项

本文(《网络程序设计》报告)为本站会员(仙***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!