付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本共 (包括封面拟制 游波审核会批拟制人无无目编写目 缩略 模块描 标准模 模块逻辑结构设 启动服 Dameo监视线程的设 AcceptProc侦听接收线程的设 ConnProc连接处理线程的设 停止服 回调函数的设 使用CSocket对 类的功能说 内部属性定 内部函数定 关联描 数据描 进程结 接口设 用户接 硬件接 软件接 规范接 非规范接 其它说 参考资 编写目编写《CSocketSvr详细设计说明》的目的在于详细地说明CSocketSVr模块中各成分的术语、定MFC:mircorosftfundmental模块描基于socket现在许多基于socket服务端的开发都缺乏通般是找一个已开发好的socket服CSocketSvr对象对socket服务进行了完整的封装。具有socket服务管理,socket连序员对接收的数据包的特殊处理采用回调函数进行。CSocketSvr应用程序中可以在任意进程或线程中使用CSocketSvr标准模模块逻辑结构设逻辑结构静态描CSocketSvr类是调用者主要操作的类。CSocketSvr类中通过CblockingSocket类提供Socket的阻塞通讯。CSocketSvr在此基础上提供服务创建,socketCSocketSvr重要的属性包括连接参数队列THREAD_DATA*pConnList以及回调函数指intstdcall*m_pFun)(void*,void*)。连接参数队列保存了各连接线程的状态,各线程Socket通讯通道(CblockingSocket对象实现)。CSocketSvr主要通过该队列对各连接进行管理,CSocketSvrsocketCblockingSocket对象实现的。Damoe线程也是通过连接参数队列中线程的运行计数器来实现对连接线程监视的。回调函数指针保存了调用者设置的该对象CSocketSvr对应的回调函数。不同的CSocketSvrCblockingSocketsocket阻塞通讯,读写超时控制,socket端口创socket操作方法。逻辑结构动态描WSAStartupWSAStartupWindowssocketDamoeint{{return}//damoem_accept_run_flag=1;//accept线程运行}//endof//demoe线程会检测到socket服务端口侦听接收线程AcceptProc不存在,从而启动AetProc线程DameovoidDamoeProc(void*pParam)//Damoe{ {{}{||pSocketServer->pConnList[i].StartFlag!=1){}}
} }在连接状态表中分配空闲的连接在连接状态表中分配空闲的连接,为该连接请求生成连接处理线程{…while(pSocketServer->m_accept_run_flag&&pSocketServer->m_runflag){{}CSockAddrsa//连接侦听,如果网络关闭返回<0stopsvr则返回<0DWORDdwThreadID;THREAD_PARAMthreadpara;…}} ConnProc NDWORDWINAPIConnProc(void* {…intRun_Stat=pSocketServer->pConnList[ConnectIndex].Run_Stat;intret;{}();//}关闭所有打开的关闭所有打开的DamoevoidCSocketSvr::StopSvr(void)//停止时先停accept,{m_runflag=0;//damoe}void{inti;{}memset(pConnList,0,sizeof(THREAD_DATA)*m_MaxThreadNum清除占用状态}取出参数:取出参数:CSocketSvr 对象连接序号ConnectIndex。intWINAPIDataProc(void*internal_param,void*{//socketpSocketSvr{}{}//ConnectIndex{if(ConnectIndex<0||ConnectIndex>=pSocketSvr->m_MaxThreadNum)}{return}{return-}//可以对业务部分代码作线程监视,时间单位:分钟,超过该时间函数未返回或未调用charsend_buffer[500];printf("getstring=%s",recv_buffer);strcpy(send_buffer,"testtestend");printf("writelen=%dtoconn%d\n",strlen(send_buffer),ConnectIndex);return}CSocketCSocketSvrprintf("startsocketserver%s:%dok\n",Svr.GetSocketAddr(),Svr.GetSocketPort());elseif(ret==RET_RUNNING){}{}
printf("socketserveralreadyprintf("startsocketserver类的定义及说intm_runflagm_accept_run_flagintm_accept_run_flag说明:对A 需停止accept线程m_accept_run_flag=0。int说明 intm_PortNocharm_ServerIP[20]intm_MaxThreadNumintm_ReceiveTimeOut_Msintm_SendTimeOut_MssockListenCBlockingSocketsockListenpConnListTHREAD_DATA*int(stdcall*m_pFun)(void*,voidvoid*m_paramSetDataPorc,在设置回调函数时同时可设置该参数,CSocket输入:给出本函数的输入参数的详细说明,包括取值范围、含义,及参数间的控制、顺序、…1int输入:算法与处理流程//socketCSockAddr{returnRET_BIND;}输出:返回:0<02输入:算法与处理流程{}返回:内部函数3 SocketConn(CBlockingSocket 输入:算法与处理流程{{ returni;}}输出:返回:>=004SendDataToConn(intConn_Index,char*buffer,int输入char*buffer:数据缓冲区intsize:要发送的数据大小returnRET_SEND;输出:返回:0<0内部函数 Get *输入
&//根据连接通道序号取客户端的地址和端 输出char* int& 返回:0<06CloseOneConn(int输入//HANDLE{}输出:无返回:
内部函数 CloseOneConn(int输入//HANDLE{}输出:无返回:8char*ShowErrMsg(int输入:算法与处理流程ErrrMsg[1][MAX_ERMSG_LEN]int{return}returnchar*ShowErrMsg(int输出:返回:9int输入:算法与处理流程输出:返回:10intSetMaxThreadNum(int输入intMaxThreadNum:设置的最大连接个数if(m_runflag==1)returnRET_RUNNING;if(pConnList)deletepConnList;pConnList=newreturnRET_OK;输出:返回:11int输入:算法与处理流程返回:12voidSetReceiveTimeOut(int输入:intMilliSecond输出:返回:内部函数13int 输入:算法与处理流程return输出:返回:内部函数14void dTimeOut(int输入intMilliSecond:发送超时时间返回:15void输入intConnIndex:需要监视的通道序号intTimeOut:监视的通道的超时时间输出:返回:16输入intConnIndex:连接线程编号//计数器输出:返回:17输入无算法与处理流程该函数生成CSocketSvr对象,但是没有设置服务地址和端,因此应该和函返回:18CSocketSvr(int输入intSvrPortNo返回:19CSocketSvr(constchar*ServerIP,int输入constchar*ServerIP:指定服务的地址intSvrPortNo:指定服务的端算法与处理流程返回:输入:算法与处理流程返回:21SetSocketAddr(constchar*ServerIP,intSvrPortNo=-输入constchar*ServerIP:指定的服务地址intSvrPortNo:指定的服务端口算法与处理流程返回:22输入无算法与处理流程return输出:返回:类型:char23输入无return输出:返回:类型24输入无算法与处理流程int{{return}//damoem_accept_run_flag=1;//accept线程运行}//endof//demoe线程会检测到socket服务端口侦听接收线程AcceptProc不存在,从而启动 类型25输入:算法与处理流程voidCSocketSvr::StopSvr(void)//停止时先停accept,{m_runflag=0;//damoe}类型26输入voidstdcall*pfun)(void*,char*,void*):回调函数指针void*param:应用可扩充参数指针算法与处理流程intWINAPIDataProc(void*internal_param,void*{intsockright=0;CSocketSvr*pSocketSvr;CBlockingSocket*pSocketConn;intConnectIndex;//socketpSocketSvr{}//pSocketConn{}//ConnectIndex{if(ConnectIndex<0||ConnectIndex>=pSocketSvr->m_MaxThreadNum)}{return}{return-}//可以对业务部分代码作线程监视,时间单位:分钟,超过该时间函数未返回或未调用charsend_buffer[500];printf("getstring=%s",recv_buffer);strcpy(se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岩土工程桩基施工方案
- 2026年网络安全在智能机械中的重要性
- 2026年自动化合同生成与管理Python实战
- 2026云南红河州泸西县融媒体中心招聘编外人员2人备考题库附参考答案详解(培优)
- 2026福建福州职业技术学院招聘4人备考题库附参考答案详解(典型题)
- 2026安徽六安市叶集区就业见习基地及见习岗位29人备考题库(第一批)附答案详解
- 锂焙烧工岗前班组建设考核试卷含答案
- 2026年4月浙江杭州市西湖区教育局所属事业单位招聘教师68人备考题库带答案详解(综合题)
- 2026年气候变化对可持续发展的影响
- 2026年4月西南医科大学附属中医医院招聘23人备考题库(四川)附答案详解(基础题)
- 斜拉桥病害分析报告
- 雅思阅读:雅思阅读复习计划
- 环境地质学课件
- 核酸扩增技术完整版
- 西南大学毕业生登记表
- 生物统计学5课件
- 中节能原平长梁沟10万千瓦风电场项目220kV送出工程环评报告
- YC/T 205-2017烟草及烟草制品仓库设计规范
- SB/T 10739-2012商用洗地机技术规范
- GB/T 15776-2006造林技术规程
- 小学语文人教四年级上册(汪莉娜)《长袜子皮皮》阅读推进课课件
评论
0/150
提交评论