用制作实时教学工程计划
本例是通过截取桌面图象,压缩并以广播数据报形式发送到各个机子。以便老师的演示可以让每个同学都可以看到。
为将数据以较快的速度从络上发送出去,须使用Socket的异步通讯方式.异步方式在命令计算机将数据报发送出去后就立即返回,不用等数据发完,当数据发送完后计算机能自动产生一个消息,通知程序可以发送下一个数据报.该方式要求用户必须自己用CAsyncSocket类派生出一个新类,并且要重写OnSend函数,以便响应FD_WRITE络事件,该事件在数据报已经全部从络发送出去后产生,并会让计算机自动执行OnSend函数.因此在该函数中要有发送下一个数据报的命令.为了让对方收到数据报后知道这是第几个数据报,可在数据报首用一个数字标记编号,每次发送数据前采用JPEG无损压缩算法压缩数据,以提高传送速度。当一屏信息发送完后,就再截取下一屏信息发送.
发送程序:
发送程序先要在C++下用MFC AppWizard 建立一个基于dialog的目标工作空间,工程名为Netss在第二部必须选取Windows Socket支持.
用MFC AppWizard建立基于dialog的目标工作空间后,在CNetssDlg派生类中加入以下程序,其中OnCreate的函数框架用ClassWizard响应WM_CREATE消息生成,里边做一些初始化操作,目的是当用户刚开始运行程序时能自动设置好环境,提高接收速度。
int i=0,ii,iii,xx,yy,b=1,pa=1000,bl=3840,eee=8192,bb;
short aa[350000];LPVOID pbit0=aa[1000];
CDC wdc;CBitmap bmp1;CDC* pdc;char frame[5000];POINT pp;LPPOINT ppp=pp;
void* pbuf=(void*)(frame[0]);int *paa=(int*)pbuf;char *pf;short *pfi;
class mysocket:public CAsyncSocket //用CAsyncSocket类派生出新类mysocket
{public: void OnSend(int nErrorCode) //当上一个数据报已经发送完后自动执行该函数
{if(pa307200) //如果发送完一屏信息,则截取下一屏信息
{pa=1000;
tBlt(0,0,640,480,pdc,0,0,SRCCOPY); //把桌面图像复制到wdc的bmp1中
tBitmapBits(614400,pbit0); //获取图像信息
GetCursorPos(ppp); //获取鼠标位置
xx=ppp-x; yy=ppp-y;
for(ii=0;ii10xx640yy480;ii++) //显示鼠标指针
for(iii=0;iiiaa[(yy+ii)*640+iii+xx+1000]=31744;
}
市民最关心的水碱含量也就是硬度、余氯、浑浊度等都包含其中。查看了各项检测结果并与国家标准分别对比 pf=frame[4];
pfi=(short*)(pf+1);
*paa=pa;
for(;pfframe[3836];) //JPEG压缩一个数据报
{*pf=0x00;
for(i=0;i8;i=i+2)
{ if(aa[pa]==aa[pa-1]) //JPEG压缩
*pf=*pf|(0x40i);
else if(aa[pa]==aa[pa-640])
*pf=*pf|(0x80i);
else if(aa[pa]==aa[pa-641])
*pf=*pf|(0xc0i);
else
{*pfi=aa[pa];
pfi++;
}
pa++;
}
pf=(char*)pfi;
pfi=(short*)(pf+1);
}
CAsyncSocket::AsyncSelect(FD_WRITE); //允许对象socks继续响应FD_WRITE事件
CAsyncSocket::SendTo(pbuf,bl,1050,NULL,0); //把该段信息发送出去,发送bl=3840字节
}
};
mysocket socks;
int CNetssDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
eate(2001,SOCK_DGRAM,FD_WRITE,NULL); //建立数据报Socket,端口号2001
tSockOpt(SO_BROADCAST,b,sizeof(BOOL),SOL_SOCKET); //选择广播数据报
tSockOpt(SO_DONTROUTE,b,sizeof(BOOL),SOL_SOCKET);
tSockOpt(SO_SNDBUF,eee,sizeof(int),SOL_SOCKET); //设置发送缓冲区长度eee
yncSelect(FD_WRITE); //允许对象socks响应FD_WRITE事件
static CWindowDC ddc(GetDesktopWindow()); //引用桌面窗口指针定义对象ddc
pdc=ddc; //将指针pdc指向ddc
eateCompatibleDC(pdc); //建立与ddc兼容的device context,
eateCompatibleBitmap(pdc,640,480); //建立与ddc兼容的位图
lectObject(bmp1); //选择bmp1
return 0;
}
上海治男科医院米诺地尔酊用多久能开始生发
南京治疗妇科习惯性流产哪家好
- 上一篇:用制作自动登陆软件物业
- 下一篇:用制作带弹出式菜单的按钮覆盖
-
滑鼠蛇的价格广西近年来价格一直在走低位置
汤羹2022年06月13日
-
溅水鱼吃什么溅水鱼喜食活饵位置
汤羹2022年06月13日
-
深圳检验检疫局截获多批活体昆虫收货人拿来位置
汤羹2022年06月13日
-
清道夫鱼能吃吗这些你都知道吗位置
汤羹2022年06月13日
-
你需要了解猫咪的生产过程位置
汤羹2022年06月13日
-
你适合养泰迪吗知识位置
汤羹2022年06月13日