扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:梁晨宝 来源:yesky 2007年11月16日
关键字:
int i=0,a,b=1,bl=3840,eee=8192;short aa[350000],ff;LPVOID pbit0=&aa[1000]; DWORD dw=0;UINT nport=1050;CString name;char frame[5000]; void* pbuf=(void*)(&frame[0]);int *paa=(int*)pbuf;char *pf;short *pfi; CDC wdc;CBitmap bmp2;CDC* pdc; class mysocket:public CAsyncSocket //用CAsyncSocket类派生出新类mysocket {public: void OnReceive(int nErrorCode) //当收到数据报后自动执行该函数 {CAsyncSocket::ReceiveFrom(pbuf,bl,name,nport,0); //从网络接收信息,接收bl=3840字节 pf=&frame[4]; pfi=(short*)(pf+1); for(;pf<&frame[3836];) //JPEG解压缩一个数据报 {for(i=0;i<8;i=i+2) {ff=(*pf)&(0xc0>>i); //JPEG解压缩 if(ff==(0x40>>i)) aa[*paa]=aa[(*paa)-1]; else if(ff==(0x80>>i)) aa[*paa]=aa[(*paa)-640]; else if(ff==(0xc0>>i)) aa[*paa]=aa[(*paa)-641]; else {aa[*paa]=*pfi; pfi++; } (*paa)++; } pf=(char*)pfi; pfi=(short*)(pf+1); } if(*paa>307200) //重现图像 {bmp2.SetBitmapBits(614400,pbit0); //把pbit0指向的内存数据复制到bmp2中 pdc->BitBlt(0,0,640,480,&wdc,0,0,SRCCOPY); //把bmp2中图像复制到用户窗口中 } } }; mysocket sockc; //定义mysocket类对象sockc int CNetccView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here sockc.Create(1050,SOCK_DGRAM,FD_READ,NULL); //建立数据报Socket,端口号2001 sockc.SetSockOpt(SO_BROADCAST,&b,sizeof(BOOL),SOL_SOCKET); sockc.SetSockOpt(SO_DONTROUTE,&b,sizeof(BOOL),SOL_SOCKET); sockc.SetSockOpt(SO_RCVBUF,&eee,sizeof(int),SOL_SOCKET); //设置接收缓冲区长度eee sockc.AsyncSelect(FD_READ); //允许对象sockc响应FD_READ事件 static CClientDC ddc(this);pdc=&ddc; //引用用户窗口指针定义对象ddc wdc.CreateCompatibleDC(pdc); //建立与ddc兼容的device context bmp2.CreateCompatibleBitmap(pdc,640,480); //建立与ddc兼容的位图 wdc.SelectObject(&bmp2); *paa=1000; return 0; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。