Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14497227
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:52:55

下载本文示例代码
  本例是通过截取桌面图象,压缩并以广播数据报形式发送到各个机子。以便老师的演示可以让每个同学都可以看到。  为将数据以较快的速度从网络上发送出去,须使用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(pa>307200) //如果发送完一屏信息,则截取下一屏信息{pa=1000; wdc.BitBlt(0,0,640,480,pdc,0,0,SRCCOPY); //把桌面图像复制到wdc的bmp1中bmp1.GetBitmapBits(614400,pbit0); //获取图像信息GetCursorPos(ppp); //获取鼠标位置xx=ppp->x; yy=ppp->y;for(ii=0;ii<10&&xx<640&&yy<480;ii ) //显示鼠标指针for(iii=0;iii aa[(yy ii)*640 iii xx 1000]=31744;}pf=&frame[4];pfi=(short*)(pf 1);*paa=pa;for(;pf<&frame[3836];) //JPEG压缩一个数据报{*pf=0x00;for(i=0;i<8;i=i 2){ if(aa[pa]==aa[pa-1]) //JPEG压缩*pf=*pf|(0x40>>i);else if(aa[pa]==aa[pa-640])*pf=*pf|(0x80>>i);else if(aa[pa]==aa[pa-641])*pf=*pf|(0xc0>>i);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 heresocks.Create(2001,SOCK_DGRAM,FD_WRITE,NULL); //建立数据报Socket,端口号2001socks.SetSockOpt(SO_BROADCAST,&b,sizeof(BOOL),SOL_SOCKET); //选择广播数据报socks.SetSockOpt(SO_DONTROUTE,&b,sizeof(BOOL),SOL_SOCKET);socks.SetSockOpt(SO_SNDBUF,&eee,sizeof(int),SOL_SOCKET); //设置发送缓冲区长度eeesocks.AsyncSelect(FD_WRITE); //允许对象socks响应FD_WRITE事件static CWindowDC ddc(GetDesktopWindow()); //引用桌面窗口指针定义对象ddcpdc=&ddc; //将指针pdc指向ddcwdc.CreateCompatibleDC(pdc); //建立与ddc兼容的device context,bmp1.CreateCompatibleBitmap(pdc,640,480); //建立与ddc兼容的位图wdc.SelectObject(&bmp1); //选择bmp1return 0;}共2页。 1 2 :   本例是通过截取桌面图象,压缩并以广播数据报形式发送到各个机子。以便老师的演示可以让每个同学都可以看到。  为将数据以较快的速度从网络上发送出去,须使用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(pa>307200) //如果发送完一屏信息,则截取下一屏信息{pa=1000; wdc.BitBlt(0,0,640,480,pdc,0,0,SRCCOPY); //把桌面图像复制到wdc的bmp1中bmp1.GetBitmapBits(614400,pbit0); //获取图像信息GetCursorPos(ppp); //获取鼠标位置xx=ppp->x; yy=ppp->y;for(ii=0;ii<10&&xx<640&&yy<480;ii ) //显示鼠标指针for(iii=0;iii aa[(yy ii)*640 iii xx 1000]=31744;}pf=&frame[4];pfi=(short*)(pf 1);*paa=pa;for(;pf<&frame[3836];) //JPEG压缩一个数据报{*pf=0x00;for(i=0;i<8;i=i 2){ if(aa[pa]==aa[pa-1]) //JPEG压缩*pf=*pf|(0x40>>i);else if(aa[pa]==aa[pa-640])*pf=*pf|(0x80>>i);else if(aa[pa]==aa[pa-641])*pf=*pf|(0xc0>>i);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 heresocks.Create(2001,SOCK_DGRAM,FD_WRITE,NULL); //建立数据报Socket,端口号2001socks.SetSockOpt(SO_BROADCAST,&b,sizeof(BOOL),SOL_SOCKET); //选择广播数据报socks.SetSockOpt(SO_DONTROUTE,&b,sizeof(BOOL),SOL_SOCKET);socks.SetSockOpt(SO_SNDBUF,&eee,sizeof(int),SOL_SOCKET); //设置发送缓冲区长度eeesocks.AsyncSelect(FD_WRITE); //允许对象socks响应FD_WRITE事件static CWindowDC ddc(GetDesktopWindow()); //引用桌面窗口指针定义对象ddcpdc=&ddc; //将指针pdc指向ddcwdc.CreateCompatibleDC(pdc); //建立与ddc兼容的device context,bmp1.CreateCompatibleBitmap(pdc,640,480); //建立与ddc兼容的位图wdc.SelectObject(&bmp1); //选择bmp1return 0;}共2页。 1 2 : 下载本文示例代码


用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程用VC 制作实时教学工程
阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~