版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:1 实验目的1理解和掌握软件工程的设计理念与设计方法。2掌握某种数据库管理以及可视化编程环境,掌握基于某种编程语言的信息系统或网络通信软件或某种通用总线接口的通信软件的开发设计方法。2 实验题目及要求题目:TCP 服务器与客户端软件本题目要求使用TCP 协议实现若干台电脑之间的通信。1任何一台电脑都具有收发信息功能。2具有记录查询通信纪录的功能。3有图形化界面。4. 服务器可同时与多个客户端通信。分别实现服务器和客户端的程序。1山东建筑大
2、学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:3 实验系统设计3.1 需求分析:本次实验的题目是TCP 服务器与客户端软件,本题目要求使用TCP 协议实现若干台电脑之间的通信。软件针对局域网内部用户,实现用户间的即时通信。需要分别实现服务器端和客户端的软件设计,并有图形化界面。服务器端负责监听用户连接请求,负责连接数据库存储用户信息,负责发送给用户好友信息,负责发送心跳报文检查用户在线状态并即时让用户更新好友在新信息。客户端发起主动连接,向服务器请求登录或者注册。客户端可以修改昵称,可以加已知
3、用户为好友(类似于 MSN的好友添加功能)。客户端之间可以发起P2P模式的聊天,可以传送文件。3.2 主要理论依据:1.TCP传输控制协议:TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接 3个过程。 TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。TCP 要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开( passive open )的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。 客户应用程序必须执行一个主
4、动打开 (active open),为此,它向服务器应用程序发送一个同步序列号( SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。 服务器必须向客户发送一个确认 (ACK)以及服务器的序列号 ( SYN)。随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回 ACK消息。如果在收到 ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。由于它的握手机制,所以 TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。2山东建筑大学实验报告学院:信电学院班级:电信 102 姓名
5、:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:2.套接字:套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程 API,它最初由伯克利大学为 BSD UNIX而创建。 BSD套接字在经过修改后被 用作 Windows 环 境的 编程 接口 (并 且被 命名 为 WinSock)。 WinSock API 被包 装在 System.Net.sockets 命名空间的 .NET 类中。 Windows Sockets 是一个独立于协议的编程接口,用于编写网络应用程序。套接字的第二层含义表示一个用于在进
6、程间进行通信的终端。在TCP/IP 中,每个终端都与一个 IP 地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区分。流失套接字用TCP/IP 协议来使用面向连接的通信;另一方面,数据报套接字用UDP/IP 来使用无连接通信。3. C/S 模型:客户机 / 服务器模型,又称为Client/Server模型,简称 C/S 架构。 C/S 计算技术在信息产业当中占有重要的地位。这种客户机 / 服务器模型是一种非对称式编程模式。 该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分 , 分别在不同的计算机上运行, 通过它们之间的分工合作来实现一个完整的功能。对于这种模
7、式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。在此“服务器”是指能在网络上提供服务的任何程序。服务器接受网络上的请求,完成服务后将结果返回给申请者。对于简单的服务,把每个请求用一个IP 数据报发给服务器,服务器用另一个数据报返回响应。客户机和服务器都是独立的计算机。当一台连入网络的计算机向其他计算机提供各种网络服务 ( 如数据、文件的共享等) 时,它就被叫做服务器。而那些用于访问服务器资料的计算机则被叫做客户机。严格说来,客户机/ 服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。采用这
8、种结构的系统目前应用非常广泛。如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。各种网络服务器基本都遵循同样的算法: 创建一个端口 (Port) ,接受从网络上来的客户服务请求,完成计算后把结果返回给客户,如此反复。3山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:3.3 系统基本构架:基于 C/S 架构的即时通信软件便于对用户信息进行统一管理和保存,面向特定的用户,对信息的安全控制能力很强。为了减轻服务器负担,客户端之间的信息传递是采用P2P 模式的,服务器
9、只负责用户的注册,登录和用户在线状态的检验。基本结构如图:注册和登录信息SERVER注册和登录信息返回信息返回信息CLIENT聊天信息 ,文件传输CLIENT3.4 功能模块设计:CLIENT:1. 注册:(1) 可以完成客户端注册,客户端可以通过填写信息进行注册,信息被发送到服务器端。2. 登录:(1) 客户可以输入账号和密码进行登录, 客户端会发送登录信息等待服务器响应, 登录成功后会发出登录成功信息并刷新好友列表。3. 修改:(1) 密码修改:应该有密码修改功能(2) 信息修改:可以更改一些注册信息4. 通信:(1) 即时聊天模块: 客户端与客户端之间建立线程进行即时聊天, 也包含有简单
10、的对称加密4山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:算法功能。(2) 好友列表:可以对好友列表进行添加删除等动作5. 文件传输:(1) 文件传输:文件传输功能SERVER:1. 注册回应:对客户端传送的注册信息进行判断。(1)HASH加密:对用户的账号和密码信息进行HASH加密(2) 重复用户检查: 将加密后信息与已存在账号进行比较, 检查是否账号已存在, 如果存在就返回错误信息(3) 注册成功:将可成功注册的用户账号和密码写入数据库内,并向客户端返回成功信息2. 修改回应:(
11、1) 对密码和信息修改请求进行判断,执行和返回修改成功信息3. 登录回应 :(1) 对登录的账号和密码进行加密检查后发回正确或错误情况,并记录上线信息(2) 好友列表发送:给成功登录的账号发送好友列表及好友上线信息(3) 上线信息发送:给成功登录的账号的好友发送在线信息(包括IP, 端口等等信息)4. 在线情况 :(1) 对登录,在线,离线的用户情况进行统计,记录和通知(2) 心跳测试:每隔一段时间发送报文测试用户是否因意外原因离线(3) 情况记录:将用户登录时间, IP ,下线时间等信息记录入数据库3.5 逻辑图:具体逻辑图如下图所示:5山东建筑大学实验报告学院:信电学院班级:电信 102
12、姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:注册失败注册成功注册YN注册信息检查密码修改用户信息管理信息修改CLIENT好友列表发送上线信息登录发送取得好友列表消息加密即时聊天消息解密文件传输离线NHASH 加密注册回应修改回应SERVER登录回应在线情况Y心跳在线情况测试记录6山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:3.6 数据库设计:服务器是作为记录和读取数据库信息的载体,与客户端关系并不复杂,这里需要重点考虑客户
13、端之间的关系。用户与用户之间的关系是较为特殊的递归关系,即描述发生在两个相同实体上的关系。E-R 图如下:Email密码用户 IDEmail好友分组好友分组密码状态状态客户端n聊天n客户端文件IPIPID昵称账号ID好友 ID昵称账号数据库包含两个表,分别为记录用户信息的TCP_Userinfo和记录用户好友信息的TCP_Friendinfo 。详细设计见下面两表:7山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:表 1用户信息表 TCP_UserInfoTCP_Userinfo列(属
14、性)名类型主键宽度是否允许为空备注UserIDnumericY9NOT NULL自增长UserAccountncharN20NOT NULL用户帐号UserNicknamencharN20NOT NULL用户昵称,可重复UserEmailncharN20NOT NULL用户 EMAILJoinDatencharN35NOT NULL注册日期LastLoginncharY20NOT NULL最后登录 IPUserIPncharY20NOT NULL用户 IPUserFavvarcharN100NOT NULL用户好友分组,有默认值UserQuestionncharY20NOT NULL密码问题U
15、serAnswerncharY20NOT NULL密码答案UserPasswordncharN20NOT NULL用户密码UserOnlineintN4NOT NULL在线状态, 1 在, 0 不在表 2用户好友表 TCP_FriendInfoTCP_Userinfo列(属性)名类型主键宽度是否允许为空备注InfoIDnumericY9NOT NULL自增长UserIDncharN20NOT NULL用户 IDFriendIDncharN20NOT NULL用户好友 IDFriendGroupncharN20NOT NULL用户好友分组8山东建筑大学实验报告学院:信电学院班级:电信 102 姓
16、名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:4 系统实现4.1 使用 XML定义的即时通信协议:信息结构 MESSAGE.CS&UMESSAGE.CS这两个 C#类定义了包括服务器信息,状态信息,注册信息,登录信息,聊天信息或者请求文件传输信息的函数,服务器和客户端通过将它们实例化和序列化再转换成流在网络上进行传输。 UMESSAGE.CS主要代码如下:Serializablepublic class UMessagepublic UMessage() private string _nickname;private string _p
17、assword;private string _accounts;private string _email;private int _info;/表示注册或者登录信息,客户端信息0 为注册, 1 为登录;服务器返回信息0 为用户已存在, 1 为注册成功 ,2 为服务器未知错误, 3 为 CLIENT在线检查,10 为登录失败, 11 为登录成功private Friend _friend;private int _fn;private string _fg;public string Nicknameget return _nickname; set _nickname = value; p
18、ublic string Passwordget return _password; set _password = value; public string Accountsget return _accounts; set _accounts = value; 9山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:public string Emailget return _email; set _email = value; public int Infoget return _in
19、fo; set _info = value; public Friend Friget return _friend; set _friend = value; public int Fnget return _fn; set _fn = value; public string Fgget return _fg; set _fg = value; 由于 MESSAGE.CS与 UMESSAGE.CS类似,在此不再详述。服务器和客户端都可以通过相同的代码对UMESSAGE赋值,再通过 XmlSerializer方法进行将 UMESSAGE序列化为 XML文档,最后将XML文档转化为网络流进行传
20、输。代码如下:#region将登录信息转为UMessageprivate void Traslator()_message.Accounts=this.TextBox1.Text;_message.Nickname=;_message.Password=this.TextBox2.Text;_message.Email=;_message.Info=1;10山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:_message.Fri=null;#endregion4.2 数据结构 Frie
21、ndStruct:服务器如果保存和传递用户的好友信息是难点之一。数据库的设计和信息的传递辨别都是比较难实现的。在数据库方面,每个用户拥有各自的好友分组信息(UserFav),分组中间使用“, ”分隔,在 TCP_FriendInfo 表中则分别保存了用户 ID 和好友 ID,使用一个 INT 字段保存分组信息。数据库以用户 ID 为标准对好友 ID 和分组信息进行内连接查询,就可以得到基本的好友信息了。在好友信息的传输方面,首先定义一个FriendStruct数据结构(当然也可以用枚举完成)如下:using System;using System.Collections.Generic;usi
22、ng System.Text;namespace TCPpublic class FriendStructpublic struct FileInfopublic int filere;/接收和拒绝信息 ,1 为接收, 2 为拒绝, 3 为取消public string filename;public long filelength;public struct Friendpublic string account;public string nickname;public string IP;public string status;public string fg;/好友分组11山东建筑大
23、学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:在 MESSAGE.CS或者 UMESSAGE.CS中,我们则定义了 FriendStruct 的数组。在 C#中使用DATAREADER语句可以逐句读取数据库查询的结果,再依次将结果赋值FriendStruct数组元素,就得到了便于发送和读取的存放好友信息的数组。赋值代码如下:while (getf.Read()/getf即是以上的数据库查询的datareader语句ffi.account=getfUserAccount.ToString();f
24、fi.IP = getfUserIP.ToString();ffi.nickname = getfUserNickname.ToString();ffi.status = getfUserOnline.ToString();ffi.fg = getfFriendGroup.ToString();i+;getf.Close();4.3 数据库连接类:实现一个快捷简单的数据库连接的相关代码是非常有必要的。实现的途径也多种多样,鉴于安全性和复杂性的需求不同,实现方法有简有繁。 本设计使用了一个简单的类 ( UserData.CS)实现了简单快捷的数据库连接和读取。主要代码如下:publicstati
25、cSqlConnectionconnStr=newSqlConnection(Server=D96B85DD938A465.;uid=sa;pwd=change;database=TCPDB); public static SqlDataReader SqlReader(string sql, SqlConnection connstr)SqlDataReader sqldr = null;SqlCommand cmd = new SqlCommand(sql, connstr);if (cmd.Connection.State.ToString() = Closed) cmd.Connect
26、ion.Open();trysqldr = cmd.ExecuteReader();catch (Exception e)if (e != null) sqldr = null;return sqldr;/ 数据库操作连接12山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:public static string SqlCmd(string sql, SqlConnection connstr)string errorstr = null;SqlCommand sqlcmd = new
27、 SqlCommand(sql, connstr);if (sqlcmd.Connection.State.ToString() = Open) sqlcmd.Connection.Close();sqlcmd.Connection.Open();trysqlcmd.ExecuteNonQuery();catch (Exception e)if (e != null) errorstr = e.ToString();sqlcmd.Connection.Close();return errorstr;在 UserData.CS 的基础上,主程序可以更方便地实现数据库连接操作,对数据库进行读写和更
28、新,在此不再详述。4.4 服务器端:服务器端的界面设计是基于便于测试的目的而实现的。如下图:13山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:1. 同步套接字网络监听基于同步套接字的网络监听器对服务器来说并不是最好的解决方案,但是仍然可行并且实现简单。主要代码如下:开启监听端口:public void Serve()int port = 8888;ServerIPEP = new IPEndPoint(IPAddress.Any, port);s = new Socket(Serve
29、rIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);s.Bind(EndPoint)ServerIPEP);s.Listen(10);alSock = new ArrayList();以下代码读取连入的连接,依次将连接加入可变长数组alsock ,并且读取传入的信息,进行反串行化:while (true)tryuc = s.Accept();alSock.Add(uc);this.tb_states.AppendText(System.Convert.ToString(uc); byte data = new byte2048;i
30、nt rect = uc.Receive(data);byte chat = new byterect;Buffer.BlockCopy(data, 0, chat, 0, rect);UMessage umessage = (UMessage)_translator.Deserialize(new MemoryStream(chat);int info = umessage.Info;对反串行化后的信息进行处理,通过 info 参数辨认客户端行为(注册或者登录) ,对注册的信息进行数据库查询,注册信息可插入,则将用户信息插入数据库,否则返回客户端“注册出错”的信息:#region处理用户注册
31、信息if (info=0)/分辨出用户发送的是注册信息string Accounts = umessage.Accounts;SqlDataReader usdr = FPara.SqlReader(select * from TCP_UserInfo where UserAccount= + Accounts + , FPara.connStr);14山东建筑大学实验报告学院: 信电学院班级:电信 102姓名: 公维蒙学号: 2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:if (usdr != null)if (usdr.Read()#region此处
32、写入返回注册失败的代码Socketsc =(Socket)alSockalSock.IndexOf(uc,0);sc.Send(chat);#endregionelse#region此处写入插入数据库用户注册信息的代码Stream ms = new MemoryStream();Socketsc =(Socket)alSockalSock.IndexOf(uc,0);if(FPara.SqlCmd(insertintoTCP_UserInfo(UserAccount,UserNickname,UserEmail,JoinDate,UserIP,UserPassword)values(+umes
33、sage.Accounts + , + umessage.Nickname + , + umessage.Email + , +System.DateTime.Now.ToString()+,+(IPEndPoint)uc.RemoteEndPoint).Address.ToString()+ ,+ umessage.Password + ),FPara.connStr) = null)umessage.Info = 1;_translator.Serialize(ms, umessage);byte d = new bytems.Length;ms.Seek(0, SeekOrigin.Be
34、gin);ms.Read(d, 0, d.Length);sc.Send(d);elseumessage.Info = 2;_translator.Serialize(ms, umessage);byte d = new bytems.Length;ms.Seek(0, SeekOrigin.Begin);ms.Read(d, 0, d.Length);sc.Send(d);#endregion15山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:usdr.Close();#endreg
35、ion如果发现用户发送的是登录信息,就根据登录信息中的用户名和密码判断是否存在用户,密码是否正确,成功后再查询出用户的好友信息并且赋值给FriendStruct,再将信息返回给客户端:#region处理用户登录信息else if (info = 1)/分辨出用户发送的是登录信息string Accounts = umessage.Accounts;string Password = umessage.Password;SqlDataReader usdr = FPara.SqlReader(select * from TCP_UserInfo where UserAccount= + Acco
36、unts + and UserPassword=+Password+, FPara.connStr);if (usdr != null)if (usdr.Read()string uid=usdrUserID.ToString();umessage.Fg = usdrUserFav.ToString();usdr.Close();SqlDataAdapter sdr = new SqlDataAdapter(select* from TCP_UserInfo join TCP_FriendInfo on TCP_FriendInfo.UserID= + uid + andTCP_UserInf
37、o.UserID=TCP_FriendInfo.FriendID, FPara.connStr);DataSet ds = new DataSet();sdr.Fill(ds, find);int xxx=ds.Tablesfind.Rows.Count;FPara.SqlCmd(update TCP_UserInfo set UserIP=+(IPEndPoint)uc.RemoteEndPoint).Address.ToString()+,UserOnline=1whereUserAccount= + Accounts + , FPara.connStr);ff=new Friendxxx
38、;int i=0;SqlDataReader getf = FPara.SqlReader(select *fromTCP_UserInfo joinTCP_FriendInfo onTCP_FriendInfo.UserID=+ uid+ andTCP_UserInfo.UserID=TCP_FriendInfo.FriendID, FPara.connStr);while (getf.Read()16山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:ffi.account=getfU
39、serAccount.ToString();ffi.IP = getfUserIP.ToString();ffi.nickname = getfUserNickname.ToString();ffi.status = getfUserOnline.ToString();ffi.fg = getfFriendGroup.ToString();i+;getf.Close();#region此处写入登录成功代码Stream ms = new MemoryStream();Socketsc=(Socket)alSockalSock.IndexOf(uc,0);this.lb_users.Items.A
40、dd(alSock.IndexOf(uc).ToString();umessage.Info = 11;umessage.Fri = ff;umessage.Fn = xxx;_translator.Serialize(ms, umessage);byte d = new bytems.Length;ms.Seek(0, SeekOrigin.Begin);ms.Read(d, 0, d.Length);sc.Send(d);/在 tb_status中写入服务器返回给客户端的代码便于测试观察this.tb_states.AppendText(System.Text.Encoding.Defau
41、lt.GetString(d); #endregionelseusdr.Close();#region此处写入登录失败代码Stream ms = new MemoryStream();Socketsc=(Socket)alSockalSock.IndexOf(uc,0);17山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:umessage.Info = 10;_translator.Serialize(ms, umessage);byte d = new bytems.Length;m
42、s.Seek(0, SeekOrigin.Begin);ms.Read(d, 0, d.Length);sc.Send(d);#endregion#endregionTb_states 是个用于监视 SOCKET传入信息的文本框,便于观察和测试相关信息:this.tb_states.AppendText( + uc.RemoteEndPoint.ToString()+ + System.Text.Encoding.Default.GetString(chat);catch (Exception ex)MessageBox.Show(ex.Message);以上代码也包含了对客户端的请求信息的判
43、断和对客户端返回信息的生成和传输。2. 多线程对于服务器来说,多线程是必不可少的,否则它将无法处理不断请求的新连接。C#的System.Threading提供了多线程编程的支持。本设计实现代码如下:this.th = new Thread(new ThreadStart(Serve);/新建一个用于监听的线程th.Start();/打开新线程不仅仅是服务器,基于P2P模式聊天的客户端也必须支持多线程运行,实现代码与之类似,在客户端设计说明中将不再叙述。18山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年
44、12 月日 成绩:4.5 客户端:1. 同步套接字客户端客户端发起同步套接字连接,并传送登录或者注册信息,由于两者方式类似,这里仅列出用户登录的代码:#region发送服务器登录信息,并接收服务器反馈信息19山东建筑大学实验报告学院:信电学院班级:电信 102 姓名:公维蒙学号:2010081266课程:应用软件综合实验实验日期: 2013 年 12 月日 成绩:public void Client()建立 SOCKET发送信息:tryIPEndPoint ServerIPEP = new IPEndPoint(IPAddress.Parse(6),8888);c =
45、new Socket(ServerIPEP.AddressFamily,SocketType.Stream,ProtocolType.Tcp);c.Connect(EndPoint)ServerIPEP);s = new MemoryStream();_translator.Serialize(s,_message);byte d=new bytes.Length;s.Seek(0, SeekOrigin.Begin);s.Read(d, 0, d.Length);int i = c.Send(d, 0, d.Length, SocketFlags.None);catch(Exception ex)MessageBox.Show(ex.Mess
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专属2024年商品销售代表协议版
- 专业仓储及配送服务:2024协议范本版A版
- 科技驱动:公司未来发展
- 2025年度彩钢房拆除与绿色建筑认证服务合同范本4篇
- 2025年度影视基地场地借用及拍摄制作合同4篇
- 2025年度科研实验场地使用权出让及研发支持服务合同4篇
- 二零二五年度抽沙船租赁及海洋环境监测协议3篇
- 2025年度新型工业园区土地使用权交易合同范本4篇
- 2025年智能工厂设备租赁居间合同示范文本4篇
- 2025年度长租公寓运营管理服务合同4篇
- 领导沟通的艺术
- 发生用药错误应急预案
- 南浔至临安公路(南浔至练市段)公路工程环境影响报告
- 绿色贷款培训课件
- 大学生预征对象登记表(样表)
- 主管部门审核意见三篇
- 初中数学校本教材(完整版)
- 父母教育方式对幼儿社会性发展影响的研究
- 新课标人教版数学三年级上册第八单元《分数的初步认识》教材解读
- (人教版2019)数学必修第一册 第三章 函数的概念与性质 复习课件
- 重庆市铜梁区2024届数学八上期末检测试题含解析
评论
0/150
提交评论