




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、附录 服务器端ClientSock.cppvoid CClientSock:setdlg(CSreenServerDlg *d,int cid,int plen) dlg=d;id=cid;pklen=plen/数据包长度为固定,处理比较方便,一般为1000到65000之间. bufoffset=0;pkbuf=new charplen*2;void CClientSock:OnReceive(int nErrorCode) / TODO: Add your specialized code here and/or call the base class dlg->myRecvData(
2、this); CSocket:OnReceive(nErrorCode);void CClientSock:GetPackage(char *buf)/接收一个长度为pklen的完整数据包do recvlen=Receive(pkbuf+bufoffset,pklen,0); if(recvlen>0) bufoffset+=recvlen; while(bufoffset<pklen);/有可能(%1可能性)只接收到部分数据,就再接收一次 memcpy(buf,pkbuf,pklen);bufoffset=bufoffset-pklen;if(bufoffset>0)/有%
3、99的可能性,bufoffset=0 memcpy(pkbuf,pkbuf+pklen,bufoffset); void CClientSock:SendCommandData(int type, char *buf, int len) NETPACKAGE pack;pack.type=type;pack.len=len;memset(pack.buf,7,pklen-8);memcpy(pack.buf,buf,len);Send(char*)&pack,pklen,0);CSreenServerDlg .CPPvoid CSreenServerDlg:OnTimer(UINT n
4、IDEvent) / TODO: Add your message handler code here and/or call default if(pclient!=NULL) CapSreen();SentSreen(hBitmap,pclient);CDialog:OnTimer(nIDEvent);void CSreenServerDlg:SentSreen(HBITMAP hBitmap, CClientSock *pc) HDC hDC =:CreateDC("DISPLAY",NULL,NULL,NULL);int iBits = :GetDeviceCaps
5、(hDC, BITSPIXEL) * :GetDeviceCaps(hDC, PLANES);/当前分辨率下每个像素所占字节数:DeleteDC(hDC);WORD wBitCount; /位图中每个像素所占字节数if (iBits <= 1)wBitCount = 1;else if (iBits <= 4)wBitCount = 4;else if (iBits <= 8)wBitCount = 8;else if (iBits <= 24)wBitCount = 24;elsewBitCount = iBits; /调色板大小, 位图中像素字节大小 DWORD d
6、wPaletteSize=0;if (wBitCount <= 8)dwPaletteSize = (1 << wBitCount) * sizeof(RGBQUAD); BITMAP bm; /位图属性结构:GetObject(hBitmap, sizeof(bm), (LPSTR)&bm);BITMAPINFOHEADER bi,bi1; /位图信息头结构 bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bm.bmWidth;bi.biHeight = bm.bmHeight;bi.biPlanes = 1;b
7、i.biBitCount = wBitCount;bi.biCompression = BI_RGB; /BI_RGB表示位图没有压缩 bi.biSizeImage = 0;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;bi1=bi; bi1.biBitCount=24;DWORD dwBmBitsSize = (bm.bmWidth * wBitCount+31)/32) * 4 * bm.bmHeight;HANDLE hDib = :GlobalAlloc(GHND
8、,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER); /为位图内容分配内存LPBITMAPINFOHEADER(LPBITMAPINFOHEADER)GlobalLock(hDib);*lpbi = bi;HANDLE hPal = :GetStockObject(DEFAULT_PALETTE);/ 处理调色板HANDLE hOldPal=NULL; lpbi =if (hPal) hDC = :GetDC(NULL); hOldPal = SelectPalette(hDC,(HPALETTE)hPal, FALSE); Rea
9、lizePalette(hDC); int nOutputBytes = 0; unsigned char *m_pDibBits; m_pDibBits = new unsigned char dwBmBitsSize;:GetDIBits(hDC, hBitmap, 0, (UINT) bm.bmHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);/ 获取该调色板下新的像素值if (hOldPal)/恢复调色板 SelectPalette(hDC, (HP
10、ALETTE)hOldPal, TRUE);RealizePalette(hDC); :ReleaseDC(NULL, hDC); int i=0,j=0;unsigned char* pcolor;pcolor=(unsignedchar*)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize;/得到像素值 for(j=0;j<dwBmBitsSize;j+) if(j%4=3) j+;m_pDibBitsi=pcolorj;i+; / /发送图像头信息 / CapSreenHeader cheader;cheader.factlen=i; /图像长度
11、NETPACKAGE pack;long filestep=0;long fileend=0; long lFileSize=i;/图像长度int end = 0; int len=0;int dtlen=50000;/数据块长度 int plen=sizeof(NETPACKAGE);/数据包长度50008 filestep=lFileSize/dtlen;/数据块数fileend=lFileSize%dtlen;/最后一块数据长度 cheader.filelength=lFileSize;/图像文件长度 cheader.blocklen=dtlen;/数据块长度cheader.width=
12、bm.bmWidth;/图像宽度cheader.height=bm.bmHeight;/图像高度pack.type=3; /图像头命令pack.len=sizeof(cheader);/图像头信息长度memset(pack.buf,7,dtlen);memcpy(pack.buf,(char*)&cheader,pack.len); pc->Send(unsigned char*)&pack,plen,0);/发送图像头信息 Sleep(100);/发送图像内容/pack.type=4; /图像内容命令pack.len=dtlen;/图像块长度for(j=0;j<f
13、ilestep;j+) memcpy(pack.buf,&m_pDibBitsj*dtlen,dtlen); pc->Send(unsigned char*)&pack,plen,0);/发送图像信息 pack.type=5; /最后一块数据命令pack.len=fileend;/最后一块数据长度memset(pack.buf,7,dtlen);memcpy(pack.buf,&m_pDibBitsfilestep*dtlen,fileend);/发送最后一块数据pc->Send(unsigned char*)&pack,plen,0);/发送图像头
14、信息 GlobalUnlock(hDib); /清除GlobalFree(hDib); delete m_pDibBits;void CSreenServerDlg:SendSreenToClient()if(pclient!=NULL&&islogin=1) CapSreen();SentSreen(hBitmap,pclient);附录 客户端CsreenClientDlg.CPPBOOL CSreenClientDlg:OnInitDialog()CDialog:OnInitDialog(); / Add "About." menu item to s
15、ystem menu. / IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()
16、pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); m_usrpwd="123" m_usrname="aaa" UpdateData(FALSE);/将控件关联变量的值传递给控件并改变控件的状态m_pBIH=NULL;/位图头m_pDibBits=NULL;/接收图像数据偏移m_pDib=NULL;pklen=sizeof(NETPACKAGE);/获取数据包的程度lbitsOffset=0;capf
17、lag=0;bcontrol=0;initDrawParam();return TRUE; / return TRUE unless you set the focus to a control void CSreenClientDlg:OnButtonGetcap()/ TODO: Add your control notification handler code here if(pclient!=NULL)pclient->SendCommandData(3,(char*)&usrinfo,sizeof(USERINFO); void CSreenClientDlg:OnB
18、uttonSavebmp() /保存bmp图片/ TODO: Add your control notification handler code here char szFilter="All files (*.*)|*.*|bmp files(*.bmp)|*.bmp|" CFileDialog fd(false,"bmp","aaa",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);if(IDOK=fd.DoModal() m_filename=fd.GetPathNa
19、me();CapSreen();WriteBmpToFile(hBitmap,m_filename); UpdateData(FALSE);CSreenClientDlg:WriteBmpToFile(HBITMAP hBitmap, CString voidstrFileName) HDC hDC =:CreateDC("DISPLAY",NULL,NULL,NULL);int iBits = :GetDeviceCaps(hDC, BITSPIXEL) * :GetDeviceCaps(hDC, PLANES);/当前分辨率下每个像素所占字节数:DeleteDC(hDC
20、);WORD wBitCount; /位图中每个像素所占字节数if (iBits <= 1)wBitCount = 1;else if (iBits <= 4)wBitCount = 4;else if (iBits <= 8)wBitCount = 8;else if (iBits <= 24)wBitCount = 24;elsewBitCount = iBits; /调色板大小, 位图中像素字节大小 DWORD dwPaletteSize=0;if (wBitCount <= 8)dwPaletteSize = (1 << wBitCount)
21、* sizeof(RGBQUAD); BITMAP bm; /位图属性结构:GetObject(hBitmap, sizeof(bm), (LPSTR)&bm);BITMAPINFOHEADER bi,bi1; /位图信息头结构bi.biSize = sizeof(BITMAPINFOHEADER);bi.biWidth = bm.bmWidth;bi.biHeight = bm.bmHeight;bi.biPlanes = 1;bi.biBitCount = wBitCount;bi.biCompression = BI_RGB; /BI_RGB表示位图没有压缩 bi.biSizeI
22、mage = 0;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;bi1=bi; bi1.biBitCount=24;DWORD dwBmBitsSize = (bm.bmWidth * wBitCount+31)/32) * 4 * bm.bmHeight;HANDLE hDib = :GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER); /为位图内容分配内存LPBITMAPIN
23、FOHEADER(LPBITMAPINFOHEADER)GlobalLock(hDib);*lpbi = bi;HANDLE hPal = :GetStockObject(DEFAULT_PALETTE); / 处理调色板HANDLE hOldPal=NULL; lpbi =if (hPal) hDC = :GetDC(NULL);hOldPal = SelectPalette(hDC,(HPALETTE)hPal, FALSE); RealizePalette(hDC); int nOutputBytes = 0;:GetDIBits(hDC, hBitmap, 0, (UINT) bm.b
24、mHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);/ 获取该调色板下新的像素值if (hOldPal)/恢复调色板 SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);RealizePalette(hDC); :ReleaseDC(NULL, hDC); BITMAPFILEHEADER bmfHdr; /位图文件头结构 bmfHdr.bfType = 0x4D42; / "BM" DWORD dwD
25、IBSize = / 设置位图文件头 + sizeof(BITMAPFILEHEADER) sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;bmfHdr.bfSize = dwDIBSize; bmfHdr.bfReserved1 = 0; bmfHdr.bfReserved2 = 0; bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+ (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;HANDLE hFile = CreateFi
26、le(strFileName, GENERIC_WRITE, 0, NULL,| CREATE_ALWAYS,FILE_ATTRIBUTE_NORMALFILE_FLAG_SEQUENTIAL_SCAN, NULL);/创建位图文件DWORD dwWritten; WriteFile(hFile, (LPSTR)&bmfHdr,/ 写入位图文件头 sizeof(BITMAPFILEHEADER), &dwWritten, NULL);WriteFile(hFile, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);/ 写入位图文件其余
27、内容GlobalUnlock(hDib); /清除 GlobalFree(hDib); CloseHandle(hFile); void CSreenClientDlg:initDrawSreen()/初始化屏幕 m_width=m_pBIH->biWidth;m_height=m_pBIH->biHeight; scrylm=m_height-cheight; if(scrylm<0) scrylm=0;scrxlm=m_width-cwidth;if(scrxlm<0) scrxlm=0;AfxMessageBox(_T("initDrawSreen&qu
28、ot;);m_vbar.SetScrollRange(0,scrylm,FALSE);/0制定最小滚动的位置 scrylm制定最大滚动的位置 TRUEm_vbar.SetScrollPos(scry,TRUE); m_hbar.SetScrollRange(0,scrxlm,TRUE); m_hbar.SetScrollPos(scrx,TRUE); UpdateData(FALSE); capflag=1; drawSreen();void CSreenClientDlg:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/
29、TODO: Add your message handler code here and/or call default int nPos1=m_vbar.GetScrollPos(); if(nSBCode=SB_LINEDOWN) scry=scry+10; if(scry>scrylm) scry=scrylm; nPos1=scry; drawSreen(); if(nSBCode=SB_LINEUP) scry=scry-10; if(scry<0) scry=0; nPos1=scry; drawSreen(); if(nSBCode=SB_THUMBTRACK) sc
30、ry=nPos; nPos1=nPos; if(nPos1>scrylm) nPos1=scrylm;if(scry<0) scry=0; if(scry>scrylm) scry=scrylm; nPos1=scry; drawSreen(); m_vbar.SetScrollPos(nPos1);CDialog:OnVScroll(nSBCode, nPos, pScrollBar);void CSreenClientDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/ TODO: Add your
31、 message handler code here and/or call default int nPos1=m_hbar.GetScrollPos(); if(nSBCode=SB_LINERIGHT) scrx=scrx+10; if(scrx>scrxlm) scrx=scrxlm; nPos1=scrx; drawSreen(); if(nSBCode=SB_LINELEFT) scrx=scrx-10; if(scrx<0) scrx=0; nPos1=scrx; drawSreen(); if(nSBCode=SB_THUMBTRACK) scrx=nPos; nP
32、os1=nPos; if(scrx<0) scrx=0; if(scrx>scrxlm) scrx=scrxlm;nPos1=scrx; drawSreen(); m_hbar.SetScrollPos(nPos1,TRUE); CDialog:OnHScroll(nSBCode, nPos, pScrollBar);void CSreenClientDlg:OnFluxMonitor() /打开开始检查流量对话框 / 开始流量监测CSniffAppDlg sniffDlg;sniffDlg.DoModal(); SniffAppDlg.cpp/线程函数UINT ThreadFun
33、( LPVOID pParam )CSniffAppDlg* pDlg = static_cast<CSniffAppDlg*>(pParam);MSG msg; char buffer1000,sourceip32 ,*tempbuf; char *ptemp; BYTE* pData = NULL; /实际数据报中的数据 UINT sourceport ; CString str; HEADIP* pHeadIP; HEADICMP* pHeadICMP; HEADUDP* pHeadUDP; HEADTCP* pHeadTCP; in_addr addr;int ret; w
34、hile (TRUE) pData = NULL; if(PeekMessage(&msg,pDlg->m_hWnd,WM_CLOSE,WM_CLOSE,PM_NOREMOVE ) pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,2,ptemp); /获取协议名称 ptemp = get_protoname(pHeadIP->proto); strcpy(sourceip,ptemp); pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount(
35、)-1,0,sourceip); /获取IP数据报总长度 WORD ipSumLen = ntohs(pHeadIP->totallen); /IP数据报头总长度 int ipHeadLen = 20; /获得去除IP层数据的长度 WORD netlen = ipSumLen - ipHeadLen; /根据不同的协议获得不同协议的数据 switch (pHeadIP->proto) case IPPROTO_ICMP: pHeadICMP = (HEADICMP*)(tempbuf+20); pData = (BYTE*)(pHeadICMP)+4;/ICMP数据报头共4个字节/
36、获取数据的长度 netlen -= 4; break; case IPPROTO_UDP: pHeadUDP = (HEADUDP*)(tempbuf+20); pData = (BYTE*)pHeadUDP+8; /UDP数据报头共8个字节 sourceport = ntohs(pHeadUDP->SourcePort);str.Format("%d",sourceport); /设置源端口 pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,3,str); str.Empty(); netlen -= 8; break; case IPPROTO_TCP: pHeadTCP = (HEADTCP*)(tempbuf+20); sourceport = ntohs(pHeadTCP->SourcePort); pData = (BYTE*)pHeadTCP+20;/TCP数据报头共20个字节str.Format("%d",sourceport); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川司法警官职业学院《数字信号处理及实验》2023-2024学年第二学期期末试卷
- 贵州财经大学《软件工程及UM》2023-2024学年第二学期期末试卷
- 北京警察学院《工程计量与计价(安装)》2023-2024学年第一学期期末试卷
- 吉林铁道职业技术学院《马克思主义经典文献导读》2023-2024学年第一学期期末试卷
- 河北资源环境职业技术学院《大坝工程设计》2023-2024学年第二学期期末试卷
- 辽宁商贸职业学院《统计基础与实务》2023-2024学年第二学期期末试卷
- 迪庆藏族自治州德钦县2025年三下数学期末学业水平测试模拟试题含解析
- 华大新2025年高补班下学期第三次月考化学试题含解析
- 安徽科技学院《各家学说》2023-2024学年第二学期期末试卷
- 2025年一期电梯间装修工程合同协议书
- 风电制氢项目可行性研究报告
- 加气站安全生产奖惩规定模版(3篇)
- 细胞治疗政策环境分析-洞察分析
- 2024-2030年中国玄武岩纤维工业行业现状调研及投资战略研究报告
- 公园景观修复零星维修施工方案
- 挂靠免责协议书范本
- 小学数学青岛版五年级下册《异分母分数大小比较与通分》课件
- 社区矫正考试题及答案
- 幼儿园水池建设方案
- 安徽省宿州市省、市示范高中2024-2025学年高一上学期期中教学质量检测英语试题 含解析
- 《驾驶室固定矩形窗》
评论
0/150
提交评论