网络聊天软件的设计与实现论文.doc_第1页
网络聊天软件的设计与实现论文.doc_第2页
网络聊天软件的设计与实现论文.doc_第3页
网络聊天软件的设计与实现论文.doc_第4页
网络聊天软件的设计与实现论文.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HUBEI NORMAL UNIVERSITY毕业论文(设计)Bachelors Thesis论文题目网络聊天软件的设计与实现网络聊天软件的设计与实现摘要:随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。本课题是开发一个基于TCP/IP的局域网聊天室系统,采用软件工程的方法,综合运用Windows程序设计技术、网络通讯技术,以Visual C+ 6.0作为系统前台应用程序开发工具进行软件开发。研究的主要内容是如何利用套接字编写网络聊天程序,主要完成了客户端的注册,发送信息与显示在线用户及服务器端的广播信息,在线用户显示等工作。通过聊天工具的使用,让分布在不同地点、使用不同机器的一组用户能够及时进行信息交流,达到信息共享的目的,从而提高工作或者生活效率。适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。关键词:套接字 服务器 客户端中图分类号:TP393.09Design and Implementation of Chat Software Based on InternetZhangYanmin(Director:Shi Shudong)(Department of Computer Science and Technology, Hubei Normal University, 435002)Abstract: With the development of networking technology and the living demand of people, chatting on network is more and more acceptable by people. This topic is going to talk about that to develop the local area internet chat-room system which based on TCP/IP, It adopts the method of software engineer, and uses the technology of Windows program designing technique and the network communication technology, makes Visual C+6.0 as the front application design tool to develop the software. The prinary content of researching is how to use the sleeve to joint the procedure of compiling the network chat, it is main to finish the task of the numbers application of clients, transmiting the message, displaying the online users and the servers broadcast message, and the displaying of online users. Through the using of chatting tool, it can make a group of users who distribute in different place ,and use different machine to communicate with senting messages timely, then achieved the goal of information sharing, and inprove the efficiency of work or living.It adapts to use the network chatting tool in local internet ,its operation is simple , the flexibility is good and movement is also guite stable.Key Words:Socket;Server;Client目 录1.引言12.基础知识原理介绍12.1 Visual C+12.2 Socket22.3 C/S架构33.系统框架44.服务器设计44.1服务器设计原理54.2服务器功能结构图54.3服务器运行界面55.客户端设计65.1客户端设计原理65.2客户端功能结构图65.3客户端运行界面76.设计细节86.1服务器向客户端转发用户聊天信息86.2客户端接收用户聊天信息97.结束语98.致谢109.参考文献11附录12网络聊天软件的设计与实现张艳敏(指导老师 石曙东)(计算机科学与技术学院0503班 湖北 黄石 435002)1. 引言随着网络的普及化,网络作为人们相互间沟通与交流联系的现代化工具日益重要,可以说现在人们的生活已经离不开网络。在现实生活中人们可以通过多种手段与家人亲戚朋友交流通讯,像电话,电子邮件等等。但这些手段都有些缺点,要么费用太高,要么实时性不强,要么一次只能和一位好友进行交流。于是这就需要一种便宜,快速,能同时与多个好友进行通讯的网络工具的出现,而网络聊天工具就满足了这些需求,填补了这个空白。 随着网络技术和数据库管理系统的发展,C/S体系结构在软件的开发中越来越流行。因为这种结构的应用软件可以充分发挥网络的作用和数据库系统的优势,以满足人们各种应用的需求。同时,Microsoft公司的Visual C+编程开发环境,已经成为各国程序员开发系统程序和应用程序的首选开发工具。这是由于它有功能强大,支持面向对象,模块化,代码可以重用及组件共享等特点,可以大大提供软件和系统开发的效率,缩短开发周期及便于系统的维护和升级。 网络的飞速发展使网络应用程序的开发地位显的越来越重要,而网络应用程序的开发和传统应用程序的开发在思想和实现上有很大的区别。Microsoft公司的Visual C+编程开发环境在进行网络应用程序开发方面有以下几个特点: 开发出的应用程序占有资源少; 开发人员有灵活多变的开发方式; 如果使用VC的MFC类库则可以使开发人员从很大程度上简化开发过程; 可使应用程序有很强的扩展性。2. 基础知识原理介绍2.1 Visual C+Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Visual C+它大概可以分成三个主要的部分:Developer Studio。这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能。MFC。从理论上来讲,MFC也不是专用于Visual C+,Borland C+,C+Builder和Symantec C+同样可以处理MFC。同时,用Visual C+编写代码也并不意味着一定要用MFC,只要愿意,用Visual C+来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C+本来就是为MFC打造的,Visual C+中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C+而不用MFC就等于抛弃了Visual C+中很大的一部分功能。Platform SDK。这才是Visual C+和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C+编译器为核心,配合MASM,辅以其他一些工具和文档资料。2.2 SocketSocket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的 Socket,对应于无连接的UDP服务应用。 Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值0。 Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上建立一个Socket意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。2.3 C/S架构在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网,Client/Server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。使用计算机的人是计算机的“用户 ”(user)而不是“客户”(client)。但在许多国外文献中,也经常把运行客户程序的机器称为client,把运行服务器程序的机器称为server。所以有时要根据上下文判断client与server是指软件还是硬件。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。3. 系统框架 由图1可知:本系统包括服务器和客户端两部分,服务器起核心作用,主要负责接收客户端聊天信息和向客户端进行转发聊天信息,客户端是重要的组成部分,主要负责提交用户的聊天信息和接收服务器的转发信息。4. 服务器设计4.1服务器设计原理首先需要开放一个对外端口作为服务器通信端口,待架设服务器完毕后,服务器就处于工作状态。服务器一方面要检测是否有新的客户端接入该服务器,另一方面要监听是否有客户端提交聊天信息。如果有新的客户端接入该服务器,那么服务器既要对该客户端的接入请求作出应答,又要对该客户端的信息进行相关处理。如果有客户端提交聊天信息,那么服务器既要显示对应的客户端聊天信息,又要将该聊天信息转发至该服务器的所有客户端。4.2服务器功能结构图4.3服务器运行界面图3 服务器设置界面图4 服务器运行界面5. 客户端设计5.1客户端设计原理首先客户端要接入聊天系统,就要与相应的服务器进行连接。当客户端成功接入聊天系统后,一方面要检测是否有用户提交聊天信息,另一方面要监听是否有来自服务器信息。如果有用户提交聊天信息,那么只需要将该聊天文本进行打包,然后上报给服务器即可。如果监听到服务器信息,那么客户端首先要对该信息进行相关处理,然后将处理后的信息进行显示。5.2客户端功能结构图5.3客户端运行界面图6 连接服务器界面图7 客户端运行界面6. 设计细节6.1服务器向客户端转发用户聊天信息为了区别来自不同客户端的聊天信息,服务器在向所有客户端转发聊天信息时,增加了客户端IP地址前缀,具体实现如下:POSITION pos=m_list.GetHeadPosition();char msgMAX_BUFFER_SIZE;CString addr;UINT port;socket-GetPeerName(addr,port);addr = + addr + :;addr += buffer;strcpy(msg,addr);while(pos!=NULL)CClientSocket *client=(CClientSocket*)m_list.GetNext(pos);client-Send(msg,strlen(msg);6.2客户端接收用户聊天信息用户可以在客户端界面的输入框内输入聊天信息,当用户按下回车键Enter时,聊天信息将自动打包发送至服务器,具体实现如下:if(nChar=VK_RETURN) CMyQQClientDoc* pDoc=GetDocument();ASSERT_VALID(pDoc); CEdit&edit=GetEditCtrl(); char buffer100; memset(buffer,0,sizeof(buffer);int index=edit.GetLineCount()-1; edit.GetLine(index,buffer,99); pDoc-SendMessage(buffer);edit.SetWindowText(pDoc-name+ ); elseCEditView:OnChar(nChar,nRepCnt,nFlags);7. 结束语本论文主要讲叙了基于Visual C+ 6.0的Client/Server模式聊天软件的开发。类似于一个简单的QQ群的功能。与其不同的是:本系统只能用于小型的网络中,比方说在一个办公室、一个公司或者一个居民小区等局域网内。8. 致谢首先要对该篇论文的指导老师石曙东教授表示衷心的感谢,是他多年的栽培和悉心指导,才让本文作者能够顺利完成该系统的设计与实现。9. 参考文献1 谢希仁编著.计算机网络M.大连:大连理工大学出版社,2006:101-1322 陈坚等编著.实用Visual C+编程大全M.西安:西安电子科技大学出版社,2000:112-1973 肖宏伟.Visual C+开发答疑M.北京:人民邮电出版社,2003:97-1074 郑阿奇.Visual C+教程M.北京:清华大学出版社,2004:100-1375 夏云龙.最新Visual C+使用手册M.北京:电子工业出版社,2005:53-676 韩存兵.Visual C+数据库编程实战M.北京:科学出版社,2004:63-897 王俊红.计算机网络基础与Internet应用M.北京:中国水利水电出版社,2005:42-778 王洪等.计算机网络应用教程M.北京:机械工业出版社,2006:125-1699 张元编.计算机网络与通信M.北京:电子工业出版社,2004:136-14710 李辉.网上聊天工具应用精选问答M.北京:石油出版社,2004:89-101附录A.服务器端代码/服务器关闭CMyQQServerDoc:CMyQQServerDoc()/关闭所有的客户套接字POSITION pos=m_list.GetHeadPosition();while(pos!=NULL)CClientSocket * client=(CClientSocket*)m_list.GetNext(pos);delete client;/关闭侦听套接字if (m_listenSocket!=NULL)m_listenSocket-Close();delete m_listenSocket;/服务器初始化void CMyQQServerDoc:OnFileStart() / TODO: Add your command handler code hereCPortDlg m_Portdlg;if(m_Portdlg.DoModal()!=IDOK) return;/如果已有一个侦听套接字,先把它关闭 if (m_listenSocket!=NULL)m_listenSocket-Close();delete m_listenSocket;/创建一个新的侦听套接字m_listenSocket=new CListenSocket(this);/根据输入端口创建服务器if(!m_listenSocket-Create(m_Portdlg.m_Port)AfxMessageBox(创建SOCKET失败!);m_listenSocket=NULL;return;/启动侦听套接字侦听连接if(!m_listenSocket-Listen()AfxMessageBox(SOCKET 侦听失败!);delete m_listenSocket;m_listenSocket=NULL;return;/删除列表中所有客户的套接字POSITION pos =m_list.GetHeadPosition();while (pos!=NULL)CClientSocket * client =(CClientSocket*)m_list.GetNext(pos);delete client;/有新客户端接入服务器void CMyQQServerDoc:AcceptClient()/创建一个新的客户套接字m_clientSocket=new CClientSocket (this);if(!m_listenSocket-Accept (*m_clientSocket)AfxMessageBox(SOCKET接收异常);delete m_clientSocket;m_clientSocket=NULL;return; #ifdef _DEBUGAfxMessageBox(有新用户加入!); #endifm_list.AddTail(m_clientSocket);/读客户端提交的聊天信息void CMyQQServerDoc:ReadMessage(CClientSocket *socket)char bufferMAX_BUFFER_SIZE; /接收信息缓冲区/检查信息有效性int len=socket-Receive(buffer,MAX_BUFFER_SIZE-1);if(lenGetEditCtrl();/获取客户对应的名称CString addr;UINT port;socket-GetPeerName(addr,port); char msgMAX_BUFFER_SIZE;wsprintf(msg,%d%s:%srn,port,addr,buffer); /格式化消息int len=eView-GetWindowTextLength();edit.SetSel(len,len);edit.ReplaceSel(msg);/向客户端转发聊天信息void CMyQQServerDoc:SendMessage(CClientSocket *socket, char *buffer)POSITION pos=m_list.GetHeadPosition();char msgMAX_BUFFER_SIZE;CString addr;UINT port;socket-GetPeerName(addr,port);addr = + addr + :;addr += buffer;strcpy(msg,addr);while(pos!=NULL)CClientSocket *client=(CClientSocket*)m_list.GetNext(pos);client-Send(msg,strlen(msg);B.客户端代码/界面初始化BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) / TODO: Add your specialized code here and/or call the base class/创建一个分割栏窗if(!m_splitter.CreateStatic(this,2,1)return FALSE;/获取窗口大小 CRect rect; GetClientRect(&rect); /设置第一个窗口大小 CSize size=rect.Size(); size.cy-=150; /分别驻CEditView和CMyQQClientView为基础创建分割窗体 if(!m_splitter.CreateView(0,0,RUNTIME_CLASS(CEditView),size,pContext) return FALSE; if(!m_splitter.CreateView(1,0,RUNTIME_CLASS(CMyQQClientView),CSize(0,0),pContext)/将第二个窗口设为激活窗口m_splitter.SetActivePane(1,0,(CView*)m_splitter.GetPane(1,0); return TRUE; /return CFrameWnd:OnCreateClient(lpcs, pContext);/客户端初始化void CMyQQClientDoc:OnFileConnet() / TODO: Add your command handler code hereCSetDlg m_Setdlg;if(m_Setdlg.DoModal()!=IDOK)return;mPort=m_Setdlg.m_port;strAddr=m_Setdlg.m_address; name=m_Setdlg.m_name;/关闭上次有效连接if(m_socket!=NULL)m_socket-Close();delete m_socket;/创建一个新的套接字m_socket=new CChatSocket(this);if(!m_socket-Create()AfxMessageBox(创建SOCKET失败!);delete m_socket;m_socket=NULL;return;/连接服务器if(!m_socket-Connect(strAddr,mPort)AfxMessageBox(连接服务器失败!);delete m_socket;m_socket=NULL;return;AfxMessageBox(连接服务器成功!);CString temp=m_Setdlg.m_name;temp+=上线了!;m_socket-Send(temp,strlen(temp);POSITION pos=GetFirstViewPosition( ); CMyQQClientView * eView=(CMyQQClientView *)GetNextView(pos) ; CMyQQClientView * cView=(CMyQQClientView *)GetNextView(pos) ; CEdit&edit=cView-GetEditCtrl();edit.SetWindowText(name);/客户端接收服务器的转发信息void CMyQQClientDoc:ReceiveMessage()/确认套接字可用ASSERT(m_socket);char buffer100;int len=m_socket-Receive(buffer,99);/检查信息是否有效if(lenIsKindOf(RUNTIME_CLASS(CMyQQClientView)continue;CEdit& edit=view-GetEditCtrl();char buffer100;wsprintf(buffer,%srn, msg);int len=edit.GetWindowTextLength();edit.SetSel(len,len);edit.ReplaceSel(buffer);/客户端提交聊天信息void CMyQQClientDoc:SendMessage(LPSTR msg)if(!m_socket-Send(msg,strlen(msg)AfxMessageBox(发送消息失败!);return;/客户端接收用户输入的聊天信息void CMyQQClientView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)/ TODO: Add your message handler code here and/or call default/如果用户按下回车则发送数据 if(nChar=VK_RETURN) CMyQQClientDoc* pDoc=GetDocument();ASSERT_VALID(pDoc); CEdit&edit=GetEditCtrl(); char buffer100; memset(buffer,0,sizeof(buffer);int index=edit.GetLineCount()-1; edit.GetLine(index,buffer,99); pDoc-SendMessage(buffer);edit.SetWindowText(pDoc-name+ ); elseCEditView:OnChar(nChar,nRepCnt,nFlags);袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论