你的位置:pcMing工作室 >> 资讯 >> 编程开发 >> C++编程 >> 详细内容 在线投稿

基于套接字通信的远程截屏显示与控制技术

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度2392票  浏览529次 【共0条评论】【我要评论 时间:2010年4月08日 20:22
pcMing工作室 @0u9w5dx;F

6~#o0tDuj0
R]l5Y/}1h4^6Q03 屏幕数据传送控制pcMing工作室j7a EHLB nLeG

Q(M*|!Fa+JSB\ru0屏幕数据的传送控制主要在如何确认服务端与客户端之间的连接,服务端如何定时分块发送屏幕数据,客户端如何拼接屏幕数据并显示图像,服务端如何响应客户端的鼠标事件等几个方面。
ud Q4t$wy0
@Zl:R2eEM03.1服务端与客户端的连接确认
9q%\8aI{-z O0双方连接可以由客户端指定服务端IP地址,或者在子网段内发送通信对方标识,服务端接收到该标识后,向客户端发送确认标识,客户端收到确认信息后,表明双方实现连接。
LY x1b |4zd]0以下代码为客户端程序片断,服务端程序将发送和接收函数的顺序对调即可。pcMing工作室j |4VvO CF

KQt!lPLx0char cFlag[8]="CopyScr\0";pcMing工作室Z%GC2mE&fQG
send(sktClient,cFlag,8,0);//发送client端标志pcMing工作室)Xr&N)[y#eR7e@
recv(sktClient,cFlag,8,0);//接收server端标志pcMing工作室Y Z GG`N%MWf
pcMing工作室7M#}8Li'u1Bm
3.2服务端定时分块发送屏幕数据pcMing工作室{!o_J`4G?
客户端以某一定时器设定为间隔,向服务端请求屏幕数据,服务端收到请求后,首先获取当前屏幕的GDI位图数据,并转化为DIB位图数据,随后采用分块传送的方式,向客户端发送屏幕的位图数据,分块过程如下所示:
JNRG`2AC0pcMing工作室*` G/Xm(yQ
(1)发送屏幕位图数据的相关信息,诸如尺寸、长度、高度等信息至客户端;pcMing工作室9o(q'\3j!@hCQ,k
send(sktClient,(char*)&ScrInfo,sizeof(ScrInfo)+1,0);pcMing工作室/?8M}&[.hm9|x
pcMing工作室7A:LNi US,k$G
(2)分块发送DIB位图数据,以SENDBLOCK为分块尺寸,同时调整当前数据指针位置;
4Y&x-z*JX+e?n2V0LPBYTE plmagePoint=(LPBYTE)hDib;
s\Q8H+X J0for(WORD i=0;i<(ScrInfo.dwSize/SENDBLOCK);i++){
#@"w b+x'l'K%JW%b0send(sktClient,(char*)plmagePoint,sizeof(BYTE)*SENDBLOCK,0);pcMing工作室#g"Sly"kqx
plmagePoint=plmagePoint + SENDBLOCK;
4g'V"t2g'O ^(x5q0recv(sktClient,(char*)&StopFlag,sizeof(int)+1,0);}pcMing工作室L1g9d?&Bdsh8f

B4P-F$s}W+P L$RI%v0(3)当屏幕位图数据不是刚好等于分块尺寸倍数的时候,用于处理余下的数据传送;
c&MLT$MbSE&N*Y H0if (ScrInfo.dwSize %SENDBLOCK)pcMing工作室xT?DMX\
send(sktClient,(char*)plmagePoint,ScrInfo.dwSize%SENDBLOCK,0);
]Jj S {'^#]-X0pcMing工作室~@k8?&b@q9rbxpn
3.3客户端拼接屏幕数据并显示图像
{z R9X'p}8O u0客户端的屏幕数据拼接程序,刚好与服务端的屏幕数据切分程序相对应,首先是接收屏幕位图相关信息,然后按照指定的分块大小接收屏幕数据,最后将小于分块尺寸的屏幕数据单独进行接收处理,得到服务端完整的一次屏幕数据,位图采用StretchDIBits函数显示。pcMing工作室sN4EwA/Fi3uzR
StretchDIBits(dc,0,0,rect.right,rect.bottom,0,0,
*b5k9LW:^8b0((LPBITMAPINFOHEADER)SvrData)->biWidth,pcMing工作室$sXIz TwS+q
((LPBITMAPINFOHEADER)SvrData)->biHeight,
b4{%k!J-Os0(LPBYTE)SvrData+(sizeof(BITMAPINFOHEADER)+color*sizeof(RGBQUAD)),pcMing工作室2z:c1C zz {
(LPBITMAPINFO)SvrData,DIB_RGB_COLORS,SRCCOPY);pcMing工作室[Eh c ED
pcMing工作室ZL0K| yS7W
3.4服务端响应客户端的鼠标事件
Kb#j1p:v Erf\0当使用鼠标点击客户端中显示服务端当前屏幕的区域,客户端程序将会记录下具体的左/右键,单/双击,X/Y坐标位置等信息,作为鼠标事件发送给服务端,服务端随后进行解析,并作出相应的响应,从而实现客户端得到服务端屏幕并加以控制的功能。pcMing工作室\j;C['?0q}xQ
mouse_event(MOUSEEVENTF_LEFTDOWN ,0,0,0,GetMessageExtraInfo());
]4vX:D(HYG0pcMing工作室&KMU;dp+y
4 结论pcMing工作室ta lrE~~T4]k
pcMing工作室?"~2O;`JJRo _9L,W
通过上述方式,客户端可以定时接收服务端当前的屏幕信息,同时服务端也可以对客户端的鼠标事件作出响应,从而实现本地机对目的机的远程控制。本显示控制技术已经被成功应用于电子测量仪器的远程监控系统中。
:t LD XI6s0参考文献pcMing工作室!?B_+J&J)D
1 常永昌, 冯新喜, 王 芳. 一种远程控制软件的设计与实现[J]. 计算机应用, 2003, 23 (3).pcMing工作室gd ]tW/Z n1a-m
2 郑灵翔, 洪景新. Windows 2000/XP下原始套接字的编程与应用[J]. 微型机与应用, 2002, 21(6).
D/l2c(w[4~5Cu03 何 斌, 马天予, 王运坚等. Visual C++数字图像处理(第2版). 北京:人民邮电出版社, 2002-12.
4nO%o,_~$WZ.z [0pcMing工作室OQ8]`dfpP-]

顶:147 踩:132
对本文中的事件或人物打分:
当前平均分:-0.32 (681次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.07 (722次打分)
【已经有710人表态】
95票
感动
105票
路过
84票
高兴
97票
难过
84票
搞笑
77票
愤怒
83票
无聊
85票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源