




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下载工具的设计与开发摘要在BT软件以及电驴等P2P工具日益发展的今天,不管你有多少带宽他都会100%的占用。这类P2P软件的下载速度完全依赖带宽,然而,如何在不提高带宽的前提下提高局域网的下载速度是一个符合实际的问题,本文就基于该问题提出并实现了“分布式下载工具”系统。该系统很好的解决了局域网被限速的问题,大大提高了下载速度。矚慫润厲钐瘗睞枥庑赖。“分布式下载工具”联合局域网内的几台客户机同时去下载Internet网上的同一资源的不同数据块,下载完后按顺序统一整合。它有下载客户机与服务器的功能,分别运用VC和VB.Net开发设计。客户机完成下载与连接其他用户的功能;而服务器则管理用户和资源情况,供客户机提供在线用户的数据,并且服务器能够对用户和资源进行控制。比如:封锁某些不合法的资源、禁止某些不合法的用户使用等。聞創沟燴鐺險爱氇谴净。本系统设计完成后,并与其他下载软件进行了测试比较,提升效果明显,有一定推广使用价值。关键词:下载速度;下载软件;局域网The Development of Distributed Download Tool ABSTRACTP2P download tools like BT and e-Mule became increasingly developed nowadays. No matter how much bandwidth you have, 100 percent fully of it will be the occupied. Download speed of such p2p software is totally depends on the bandwidth. However, how to boost speed of LAN on the actuality of bandwidth is a practical issue .this article expatiates from such issue and actualize “distributed download tool” system. This system has a very good solution to the limited LAN, strongly improving the download speed. 残骛楼諍锩瀨濟溆塹籟。The Distributed download tool”, is a technology to join several clients at the same time to download different data blocks from the some resources on the Internet, and each client reunifies these blocks a completed file. The system can act as client and server both, respectively, with VC and VB.Net to exploit and design. As a client it does download work and connects with other users; while being the server, it manages the users and resources for the client and provides online data. Besides, the server can control users and resources. 酽锕极額閉镇桧猪訣锥。Compared with other download software, a completed “Distributed download tool” system upgrades download speed significantly and is of good popularization value. 彈贸摄尔霁毙攬砖卤庑。Key words: Download Speeds; Download Software; Local Area Networks謀荞抟箧飆鐸怼类蒋薔。目录第一章 前言1厦礴恳蹒骈時盡继價骚。1.1项目简单介绍1茕桢广鳓鯡选块网羈泪。1.2 项目特点1鹅娅尽損鹌惨歷茏鴛賴。1.3 项目开发背景2籟丛妈羥为贍偾蛏练淨。1.4 项目的创新性2預頌圣鉉儐歲龈讶骅籴。1.5 项目开发的总目标2渗釤呛俨匀谔鱉调硯錦。第二章 需求分析3铙誅卧泻噦圣骋贶頂廡。2.1 功能需求3擁締凤袜备訊顎轮烂蔷。2.2 性能需求3贓熱俣阃歲匱阊邺镓騷。2.3 系统数据流图4坛摶乡囂忏蒌鍥铃氈淚。2.3.1 系统总体数据流图4蜡變黲癟報伥铉锚鈰赘。2.3.2 服务器端数据流图5買鲷鴯譖昙膚遙闫撷凄。2.3.3客户端数据流图6綾镝鯛駕櫬鹕踪韦辚糴。第三章 概要设计9驅踬髏彦浃绥譎饴憂锦。3.1 系统结构设计9猫虿驢绘燈鮒诛髅貺庑。3.1.1 系统结构示意图9锹籁饗迳琐筆襖鸥娅薔。3.1.2 系统组织模块结构图9構氽頑黉碩饨荠龈话骛。3.1.3 系统HIPO表10輒峄陽檉簖疖網儂號泶。3.2 接口设计11尧侧閆繭絳闕绚勵蜆贅。3.2.1 用户界面接口11识饒鎂錕缢灩筧嚌俨淒。3.2.2 软件系统接口13凍鈹鋨劳臘锴痫婦胫籴。3.2.3 软件内部接口13恥諤銪灭萦欢煬鞏鹜錦。3.3 数据库设计13鯊腎鑰诎褳鉀沩懼統庫。第四章 详细设计15硕癘鄴颃诌攆檸攜驤蔹。4.1基本设计概念和处理流程15阌擻輳嬪諫迁择楨秘騖。4.2 关键技术代码17氬嚕躑竄贸恳彈瀘颔澩。第五章 系统的关键技术和难点28釷鹆資贏車贖孙滅獅赘。5.1 MFC消息传递机制技术28怂阐譜鯪迳導嘯畫長凉。5.2 VC Socket通讯技术28谚辞調担鈧谄动禪泻類。5.3 VC多线程技术29嘰觐詿缧铴嗫偽純铪锩。第六章 软件测试与改进思想30熒绐譏钲鏌觶鷹緇機库。6.1 软件测试30鶼渍螻偉阅劍鲰腎邏蘞。6.2 软件改进思想31纣忧蔣氳頑莶驅藥悯骛。第七章 安装与使用说明32颖刍莖蛺饽亿顿裊赔泷。7.1 服务器端安装说明32濫驂膽閉驟羥闈詔寢賻。7.2 服务器端操作说明34銚銻縵哜鳗鸿锓謎諏涼。7.3 客户端的安装说明38挤貼綬电麥结鈺贖哓类。7.4 客户端使用说明41赔荊紳谘侖驟辽輩袜錈。参考文献44塤礙籟馐决穩賽釙冊庫。结束语46裊樣祕廬廂颤谚鍘羋蔺。致谢47仓嫗盤紲嘱珑詁鍬齊驁。分布式下载工具的设计与开发第一章 前言1.1项目简单介绍本下载工具是联合局域网内的几台客户机同时去下载Internet网上的同一资源的不同数据块,下载完后按顺序统一整合。它由下载客户机与服务器两个部分组成,其中客户机完成下载与连接其他用户的功能;而服务器则管理用户和资源情况,供客户机提供在线用户的数据,并且服务器能够对用户和资源进行控制。比如:封锁某些不合法的资源、禁止某些不合法的用户使用等。绽萬璉轆娛閬蛏鬮绾瀧。其原理是利用局域网内高的传输速度和解决局域网被限速问题。例如:局域网的主机A要去下载Internet上某服务器的资源,那么它就会联合局域网内的几台主机(主机B,主机C,主机D等),它先请求服务器获取信息(资源大小),然后根据资源大小和联合的主机数平均分配任务,分别向服务器下载数据。在下载过程中,每台机将定时发送本机所下载的资源给主机A,直到下载完成。在下载过程中,如果主机C的平均速度与其他主机的平均下载速度相差悬殊的话,那么主机A将发出撤销主机C的请求,然后主机A重新搜索局域网内的其他主机代替主机C。若局域网内的主机都不能接受请求的话,那主机A将把主机C剩下的资源重新平均分配给正在下载的主机,这样就完成了整个下载任务,因此得到了很短的下载时间。骁顾燁鶚巯瀆蕪領鲡赙。1.2 项目特点 1. 本系统实现了多台机的联机下载。 2. 本系统能够对机器的性能进行分析,然后调整每台机的下载量。 3. 本系统能够检测客户端机器突然死机或者关闭的情况,对其释放,然后重新寻找新的客户端进行下载剩下的资源。瑣钋濺暧惲锟缟馭篩凉。 4. 本系统能够对每个资源进行管理,当有遇到一些不合法的资源时,可对其资源进行封闭。 5. 本系统能够有效管理客户端的使用,当有客户进行一些非法资源的传播时,可对他进行封锁。1.3 项目开发背景 随着网络的发展以及各种应用软件的出现,我们可以通过网络实现与远方亲人进行电话聊天,与朋友进行互动游戏。因此相应的网络带宽也越来越受到人们的重视,人们一般通过租用更多的带宽来提高网络速度。鎦诗涇艳损楼紲鯗餳類。但是在BT软件以及电驴等P2P工具日益发展的今天,不管你有多少带宽他都会100%的占用。所以目前,如何封锁P2P软件逐渐成为局域网网络管理员头疼的问题,很多局域网都将这个问题转换为带宽限制,他们通过一些软件和路由的控制有效地限制了网络带宽,从而实现对P2P软件的控制,大大影响了P2P下载软件的下载速度,效果非常显著。但是我们总是追求更高品质的网络生活,希望下载速度能够“再快一点”。对此,我将根据这些存在的问题设计出了此系统,大大提高了下载速度。栉缏歐锄棗鈕种鵑瑶锬。1.4 项目的创新性1. 本软件能够主动连接其他机器分块进行下载,从而不会出现下载重复资源的现象,而其他P2P软件则是被动的,避免不了下载重复资源。辔烨棟剛殓攬瑤丽阄应。2. 本软件能够有效达到了资源共享,充分利用了局域网内高的传输速度的特点,达到了资源的高效利用。1.5 项目开发的总目标系统开发的总目标是:充分利用局域网内的高速的传输速率与解决局域网内被限速带来的下载速度慢的问题来提高他们的下载速度。 峴扬斕滾澗辐滠兴渙藺。第二章 需求分析2.1 功能需求根据校园网特点和目前的下载工具状况,我对这个系统的需求具有以下几个主要功能:1. 单机下载因特网上的资源。2. 连接局域网内的其他用户一起下载因特网上的资源。3. 当遇到本局域网内有其他用户曾下载过的资源,系统能够识别它,然后直接从本局域网下载此资源。针对以上几个主要功能,可把本系统分为两大模块:分布式下载工具客户端和分布式下载工具服务器端。其中分布式下载工具客户端又可分为发起下载管理模块和接受下载管理模块。詩叁撻訥烬忧毀厉鋨骜。2.2 性能需求 本系统是利用局域网内每台机互传的速度快的原理,并且是为了解决局域网内被限速导致下载速度慢的问题,所以本系统在一个局域网内并且该局域网内的IP被限了速度的环境下使用时,效果将会达到相当明显。则鯤愜韋瘓賈晖园栋泷。2.3 系统数据流图2.3.1 系统总体数据流图 图2.1 系统总体数据流图从图2.1系统总体数据流图可看出,客户端新建下载任务首先向服务器端发送命令,等待服务器端返回的可供联机的地址,然后客户端根据这些地址向客户端发送联机请求,等待客户端回应,最后一起参与下载。胀鏝彈奥秘孫戶孪钇賻。2.3.2 服务器端数据流图图2.2 服务器端顶层数据流图 由上图可看出,客户端发送命令到服务器端,服务器端接收命令,然后对命令的一次处理,处理完后把相应的数据存入数据库,然后再从数据库取出数据,然后把数据经过一次命令处理后把他转为命令,最后把命令发送给客户端。鳃躋峽祷紉诵帮废掃減。图2.3 系统第二层数据流图 服务器端第二层数据流图如上图所示,命令在处理之后分为6种不同处理过程,系统分别对不同的处理过程来操作数据库,并把所得的结果经过命令格式化转变为命令,最后发送给客户端。稟虛嬪赈维哜妝扩踴粜。2.3.3客户端数据流图 图2.4 客户端顶层数据流图由图2.4可看出客户端下载任务时,向服务器端发出请求,获取可供联机的用户,然后进行联机区下载。 图2.5 客户端第二层数据流图 由图2.5可看出,客户端与服务器,客户端与客户端之间都分别进行命令分析,对不同的命令进行相应的操作。第三章 概要设计3.1 系统结构设计3.1.1 系统结构示意图图3.1 系统结构示意图3.1.2 系统组织模块结构图图3.2 系统组织模块结构图3.1.3 系统HIPO表(a) 发起下载管理模块IPO表(b) 接收下载管理模块IPO表(C)服务器管理模块图3.3 系统HIPO表3.2 接口设计3.2.1 用户界面接口本系统以一个友好而简单的界面呈现给用户,如下图:图3.4 客户端界面图资源列表区用户列表区信息显示区资源搜索区 图3.5 客户端界面图3.2.2 软件系统接口(1)客户端与客户端之间的通讯。采用TCP通讯协议。发起下载客户端发送给接收下载客户端之间的命令格式:URLStartbytesEndbytes结束字节开始字节资源的url地址结束标志(2)客户端与服务器端之间的通讯。采用TCP通讯协议。客户端发送给服务器端的命令格式:StatusIP#状态客户端IP地址其中状态包括:ON 系统启动 END 系统关闭 NEW 新建下载任务 CHANGE 改变用户。 服务器返回客户端的命令格式:IP/#有效的IP地址,多个IP之间用”/”分开结束标志3.2.3 软件内部接口表 3.1 主要的模块接口表接口名称传递参数接口说明CHttpDowndLoad:DownLoad()下载基本信息下载服务器资源CHttpDowndLoad:TestLink()url测试能否连接服务器CHttpDowndLoad:MTConnectThread()用户IP地址连接参与下载的用户CHttpDowndLoad:MTServerThreadAccept()无创建监听对象CHttpDowndLoad:SendData()连接套接字发送数据3.3 数据库设计表 3.2 UserIP 用户信息表字段名类型说明备注UserIDInt用户ID号主键,自动标识UserIPVarchar(16)用户IP地址StatusInt用户状态-1为封锁 0为离线,1为在线表3.3 UserDownInfo 用户下载资源信息表字段名类型说明备注InfoIDInt资源ID主键,自动标识UserIPVarchar(16)用户IP地址URLVarchar资源下载的url地址PathVarchar资源存放路径FileNameVarchar资源存放名称DownTimeDate下载时间FinishFlagInt完成标志0为未完成,1为完成ForbidInt封锁标志 -1为封锁,0为正常第四章 详细设计4.1基本设计概念和处理流程创建下载任务模块表示需要下载某一资源的用户所用的模块,其工作流程图: 图4.1 发起下载管理模块工作流程图接收下载命令模块表示接收发起机的下载命令进行下载,其流程图如图4.2图4.2 接收下载管理模块工作流程图用户IP管理服务器,用来管理在线用户,提供客户机可参与下载的用户IP信息。其工作流程图如下:图4.3 服务器端工作流程图4.2 关键技术代码1. 下载资源代码UINT CHttpDowndLoad:DownLoad(LPVOID pParam)CHttpSocket HttpSocket1; IDInfo *IdInfo;IdInfo=new IDInfo;IdInfo=(IDInfo *)pParam; const char *pRequestHeader = NULL;char *pResponseHeader=NULL;char *pAcceptType=NULL; long nLength; DWORD dwServiceType;CString strServer;CString strObject;unsigned short nPort;/得到视图类的指针/CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd;陽簍埡鲑罷規呜旧岿錟。 / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame();沩氣嘮戇苌鑿鑿槠谔應。 / Get the active view attached to the active MDI child window.钡嵐縣緱虜荣产涛團蔺。 POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); 懨俠劑鈍触乐鹇烬觶騮。CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); 謾饱兗争詣繚鮐癞别瀘。CFile* DownloadFile; /打开在StartHttpDownLoad()中创建的文件呙铉們欤谦鸪饺竞荡赚。DownloadFile=new CFile;DownloadFile-Open(pView-m_taskdowninfoIdInfo-TaskID.savepath+pView-m_taskdowninfoIdInfo-TaskID.filename,CFile:modeWrite|CFile:shareDenyNone);莹谐龌蕲賞组靄绉嚴减。HttpSocket1.CloseSocket; AfxParseURL(LPCTSTR)(pView-m_taskdowninfoIdInfo-TaskID.url),dwServiceType,strServer, strObject, nPort);麸肃鹏镟轿騍镣缚縟糶。pRequestHeader = HttpSocket1.FormatRequestHeader(LPTSTR)(LPCTSTR)strServer,(LPTSTR)(LPCTSTR)strObject,nLength,NULL,NULL,pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes,pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.ToBytes,0,NULL); DownloadFile-Seek(pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes,CFile:begin); /设置文件指针位置*/納畴鳗吶鄖禎銣腻鰲锬。HttpSocket1.Socket();HttpSocket1.Connect(LPTSTR)(LPCTSTR)strServer,nPort);風撵鲔貓铁频钙蓟纠庙。HttpSocket1.SendRequest();pResponseHeader=HttpSocket1.GetResponseCharPoint();灭嗳骇諗鋅猎輛觏馊藹。int nSvrState = HttpSocket1.GetServerState();CString csState;csState.Format(%d,nSvrState);csState=csState.Left(1); if(csState=2)char pData5024; /用于存放接收数据的字符数组long nReceSize = 0; /实际接收数据的长度(服务器返回来的值)CString fpath;long rsize,sendsize;rsize=0; sendsize=0; long nsize; char buf15024; nsize=pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.ToBytes-pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes; 铹鸝饷飾镡閌赀诨癱骝。 while(rsizensize)nReceSize = HttpSocket1.Receive(pData,5024);if(nReceSizeWrite(pData,nReceSize); rsize=rsize+nReceSize;pView-m_taskdowninfoIdInfo-TaskID.finishsize+=nReceSize;夹覡闾辁駁档驀迁锬減。DownloadFile-Close();pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FinishFlag=true;视絀镘鸸鲚鐘脑钧欖粝。 :PostMessage(pView-m_hWnd,WM_SENDDATA,0,(long)&IdInfo); 偽澀锟攢鴛擋緬铹鈞錠。return 0;2. 连接其他用户代码UINT CHttpDowndLoad:MTConnectThread(LPVOID pParam)緦徑铫膾龋轿级镗挢廟。/得到视图类的指针 /CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd;騅憑钶銘侥张礫阵轸蔼。 / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame();疠骐錾农剎貯狱颢幗騮。 / Get the active view attached to the active MDI child window.镞锊过润启婭澗骆讕瀘。 POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); 榿贰轲誊壟该槛鲻垲赛。CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); 邁茑赚陉宾呗擷鹪讼凑。 IDInfo *IdInfo;IdInfo=new IDInfo;IdInfo=(IDInfo*)pParam;char buf1024;sockaddr_in addr;addr.sin_addr.S_un.S_addr = inet_addr(pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.UserIP);嵝硖贪塒廩袞悯倉華糲。addr.sin_family=AF_INET;addr.sin_port=LOCAL_PORT;WSADATA wsaData;WSAStartup(0x101,&wsaData);SOCKET g_ConnectSocket;g_ConnectSocket = socket(AF_INET, SOCK_STREAM,0);if(g_ConnectSocket=INVALID_SOCKET)return -1;if(connect(g_ConnectSocket,(sockaddr*)&addr,sizeof(addr)=-1)该栎谖碼戆沖巋鳧薩锭。AfxMessageBox(无法连接到客户机);return -1;pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.s=g_ConnectSocket;劇妆诨貰攖苹埘呂仑庙。CString temp,finishsize,fromsize;fromsize.Format(%d,pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes); 臠龍讹驄桠业變墊罗蘄。finishsize.Format(%d,pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.ToBytes);鰻順褛悦漚縫冁屜鸭骞。temp=URL:;temp+=pView-m_taskdowninfoIdInfo-TaskID.url;temp+=lfromsize:; temp+=fromsize; temp+=lfinishsize:;temp+=finishsize;temp+=#;strcpy(buf,temp);int slen;slen=0;int tlen;tlen=temp.GetLength(); while(slen=0) break;else if(temp2.Find(cmd:end)=0)closesocket(g_ConnectSocket);:PostMessage(pView-m_hWnd,WM_CHANGEUSR,(long)IdInfo,0); 穑釓虚绺滟鳗絲懷紓泺。return 0;else CString speed2,finishsize2,time2; ParseBuf2(buf2,finishsize2,speed2,time2); pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Rate=finishsize2; 隶誆荧鉴獫纲鴣攣駘賽。 pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Speed=speed2;浹繢腻叢着駕骠構砀湊。 pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Time=time2; 鈀燭罚櫝箋礱颼畢韫粝。CFile* rfile; /打开在StartHttpDownLoad()中创建的文件rfile=new CFile;rfile-Open(pView-m_taskdowninfoIdInfo-TaskID.savepath+pView-m_taskdowninfoIdInfo-TaskID.filename,CFile:modeWrite|CFile:shareDenyNone);惬執缉蘿绅颀阳灣熗鍵。rfile-Seek(pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes,CFile:begin); /设置文件指针位置贞廈给鏌綞牵鎮獵鎦龐。long rlength,len,buflen,startsize;rlength=0;char buf15024;while(rlengthm_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.ToBytes-pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes)嚌鲭级厨胀鑲铟礦毁蕲。len=recv(g_ConnectSocket,buf1,5024,0);rfile-Write(buf1,len);rlength+=len;pView-m_taskdowninfoIdInfo-TaskID.finishsize+=pView-m_taskdowninfoIdInfo-TaskID.finishsize; 薊镔竖牍熒浹醬籬铃騫。rfile-Close;return 0;3. 点对点互传代码UINT CHttpDowndLoad:SendFile(LPVOID pParam)/得到视图类的指针 /CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd;齡践砚语蜗铸转絹攤濼。 / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame();绅薮疮颧訝标販繯轅赛。 / Get the active view attached to the active MDI child window.饪箩狞屬诺釙诬苧径凛。 POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); 烴毙潜籬賢擔視蠶贲粵。CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); 鋝岂涛軌跃轮莳講嫗键。ConnectInfo *ConInfo;ConInfo=(ConnectInfo *)pParam;long FileSize;long ReadSize;long SendSize;long TempSize; CString temp;CString SFileSize;char buf128;char data5*1024;CFile pFile; if(pFile.Open(ConInfo-Path,CFile:modeRead|CFile:shareDenyNone)撷伪氢鱧轍幂聹諛詼庞。FileSize=pFile.GetLength();SFileSize.Format(%d,FileSize); temp=STATUS:HAVESIZE:;temp+=SFileSize;temp+=#;strcpy(buf,temp);send(ConInfo-s,buf,temp.GetLength(),0);ReadSize=0;SendSize=0;while(SendSizes,data,ReadSize,0);SendSize+=ReadSize;elsetemp=STATUS:NONESIZE:#;strcpy(buf,temp);send(ConInfo-s,buf,temp.GetLength(),0);return 0;return 0;4.服务器命令处理代码Public Function DoEvent(ByVal str As String, ByVal ss As Socket) As Boolean踪飯梦掺钓貞绫賁发蘄。 Dim dv As DataView Dim userip As String Dim status As String status = str.Substring(str.IndexOf(STATUS:) + 7, str.IndexOf(IP:) - str.IndexOf(STATUS:) - 7)婭鑠机职銦夾簣軒蚀骞。 Select Case status Case START 用户启动命令 userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3)譽諶掺铒锭试监鄺儕泻。 dv = db.RunSQLAsDataView(select * from UserIP where UserIP like % + userip + %) 查询用户信息是否已经在数据库俦聹执償閏号燴鈿膽賾。 If dv.Count 0 Then 如果用户已经存在,则直接更新用户状态为在线 db.RunDelOrInsSQL(update UserIP set status=1 where UserIP like % + userip + %)缜電怅淺靓蠐浅錒鵬凜。 Else 如果用户不存在,则插入用户IP并且置状态为在线 db.RunDelOrInsSQL(insert into UserIP(UserIP,status) values( + userip + ,1)骥擯帜褸饜兗椏長绛粤。 End If RefreshUserList() txbShowInfo控件显示用户上线信息 ShowData(用户 + userip + 上线了) Case CLOSE 用户离开命令 userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3)癱噴导閽骋艳捣靨骢鍵。 dv = db.RunSQLAsDataView(select * from UserIP where UserIP like % + userip + %) 查询用户信息是否已经在数据库鑣鸽夺圆鯢齙慫餞離龐。 If dv.Count 0 Then 如果用户已经存在,则直接更新用户状态为离线 db.RunDelOrInsSQL(update UserIP set status=0 where UserIP like % + userip + %)榄阈团皱鹏緦寿驏頦蕴。 Else 如果用户不存在,则插入用户IP并且置状态为离线 db.RunDelOrInsSQL(insert into UserIP(UserIP,status) values( + userip + ,0)逊输吴贝义鲽國鳩犹騸。 End If RefreshUserList() txbShowInfo控件显示用户离线信息 ShowData(用户 + userip + 离开了) Case CHANGE 用户改变连接用户命令 Dim buf As String = userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3)幘觇匮骇儺红卤齡镰瀉。 dv = db.RunSQLAsDataView(select UserIP from UserIP where UserIP not like % + userip + % and status like 1)誦终决懷区馱倆侧澩赜。 buf = dv(0)(UserIP).ToString ss.Send(Encoding.Default.GetBytes(buf) Case NEW 用户新建任务命令 Dim i As Integer Dim buf As String = userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3)医涤侣綃噲睞齒办銩
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年辽宁省事业单位招聘考试教育类专业知识试卷及答案
- 2025年中式烹调师(技师)考试题库及答案
- 2025年事业单位招聘面试真题模拟试卷:时事热点解读
- 2025年事业单位招聘考试综合类专业能力测试试卷(管理类)2025年真题模拟与解析
- 呼市地理统考试卷及答案
- 碳汇时空分布预测-洞察与解读
- 河南信阳二模语文考试试卷及答案
- 2025国考邯郸市食品药品监管岗位申论必刷题及答案
- 2025国考抚顺市巡视巡察岗位行测题库含答案
- 2025国考青海证监局行测常识判断高频考点及答案
- 家庭教育指导服务行业:2025年家庭教育市场消费者行为分析报告
- 苏州加装电梯协议书范本
- 大单元教学设计课件讲解
- 城市市容管理课件
- 门诊护理服务规范课件
- 首件工程(隧道)实施方案
- 孝心教育主题班会
- DR影像技术摆位课件
- 肝囊肿的护理查房
- nba篮球管理制度
- 公司厂房出租管理制度
评论
0/150
提交评论