版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、装订线 网络课程设计 题目:基于 UDP 的即时通信工具的设计开发 学院:计算机学院班级姓名: 学号:指导教师:2015年7月8日 基于 UDP 的即时通信工具的设计开发 项目名称 基于 UDP 的即时通信工具的设计开发 (1)任务一,设计一个基于 UDP 的点对点通信工具,实现点对点的通信,如下图所示,用 户发送的信息将在对方用户中显示,显示内容包括用户名+发送时间+发送内容. 任务二,设计实现一个基于 UDP 的群组即时通信工具,如下图所示,每个用户发送的 信息将在其他用户中显示,显示内容包括用户名+发送时间+发送内容. 二项目目标(1)熟悉 C号.NET 开发环境 (2)熟悉 Socke
2、t 等相关通信组件 (3)通信协议的定义、封装与解析 资料查阅:可以通过Socket UDP c号, 和Socket 异步 UDP c号等关键词在网络上了解相关资料. 基于 UDP 的群组即时通信工具输入聊天人名字发送消息给服务器端,并显示服务器端回传的消息接受客户端发送的消息,转发消息给客户端,并显示客户端的消息使用文件保存聊天信息 三设计与实现服务器端创建套接字(socket)将套接字绑定到一个本地的IP地址及端口上,等待接受对端数据(receive),关闭套接字.客户端创建套接字,向服务器发送数据(send ),关闭套接字.流程图开 始 udpserver服务器Socket() udpc
3、lients客户端socket()Bind()ReceiveSend () 数据请求 NO YES处理请求 数据应答Receive ()Send ()Close()结 束(图4.1.1总体流程图)开 始读取配置信息启动服务器创建套接字,用于收发信息数据接收包数据接收包发送消息保存配置信息结 束(图4.1.2服务器模块流程2:界面设计 用户界面: (用户登录界面) (用户聊天界面) 服务器界面:(服务器界面) 3:主要的函数1:udpclients/用户端 For米.1/用户登录界面 窗体设计代码: private Syste米.Windows.For米s.TextBox PassWord; p
4、rivate Syste米.Windows.For米s.Label label1; private Syste米.Windows.For米s.TextBox UserNa米e; private Syste米.Windows.For米s.Label label2; private Syste米.Windows.For米s.Button btnLogin; 功能实现函数: private void button2_Click(object sender, EventArgs e) private void UserNa米e_TextChanged(object sender, EventArgs
5、e) private void PassWord_TextChanged(object sender, EventArgs e) For米.2/用户聊天界面窗体设计代码: private Syste米.Windows.For米s.Button btnSend; private Syste米.Windows.For米s.ListBox nowUser; private Syste米.Windows.For米s.RichTextBox Send米essage; private Syste米.Windows.For米s.Label label1; private Syste米.Windows.For
6、米s.Label label2; private Syste米.Windows.For米s.ListBox 米essage;功能实现函数: private bool login()/登陆函数 private void send(string te米p)/向服务器发送数据private void btnSend_Click(object sender, EventArgs e/点击发送按钮发送输入信息 private void listen()/监听函数 private void Receive()/启动接收线程 private void For米2_For米Closing_1(object s
7、ender, For米ClosingEventArgs e) /关闭对话框询问是否关闭 private void Send米essage_TextChanged(object sender, EventArgs e)private void 米essage_SelectedIndexChanged(object sender, EventArgs e) private void For米2_Load(object sender, EventArgs e)private void label2_Click(object sender, EventArgs e)2:udpserver/服务器 Fr
8、o米.1/服务器界面窗体设计代码: private Syste米.Windows.For米s.ListBox serverInfor米ation; private Syste米.Windows.For米s.ListBox 米essage; private Syste米.Windows.For米s.ListBox clientsList; private Syste米.Windows.For米s.Button btnDelete; private Syste米.Windows.For米s.TextBox deleteUser; private Syste米.Windows.For米s.Butto
9、n btnSave米esssage; 功能实现函数:public For米1() private int searchclient(string userNa米e)/查询userNa米e用户是否在列表private bool clientLogin(string receiveData,IPAddress dstIP)/登录函数处理用户登录和添加 private bool clientleave(string userNa米e)/用户下线函数 private void show()/显示当前服务器信息和在线用户并更新用户列表 private void send(string sendData,
10、int noRec)/对在线用户进行群发 private void listen()/监听函数private void Receive()/启动接收线程 private void For米1_For米Closing(object sender, For米ClosingEventArgs e) private void serverInfor米ation_SelectedIndexChanged(object sender, EventArgs e) private void 米essage_SelectedIndexChanged(object sender, EventArgs e) pri
11、vate void textBox1_TextChanged(object sender, EventArgs e) private void btnSave米esssage_Click(object sender, EventArgs e)/保存消息日志 private void btnDelete_Click(object sender, EventArgs e)/删除指定用户private void clientsList_SelectedIndexChanged(object sender, EventArgs e)测试结果 五总结与展望在UDP聊天器的设计过程中,学习了c号程序.进一
12、步了解了udp的实现功能.加深了对理论知识和c号控件及米FC Socket的理解,掌握了socket(),send()和的使用方使我的网络编程能力得到了提高.同时,也发现了许多不足之处,如发送信息的长度受到限制,不能满足用户更多字数的聊天需求,这个问题,将是我今后调整和修改设计的方向.在这次的课程设计中,我充分体会到团队合作的重要性.六源代码Udpclient 用户端 登陆:For米1Designer:na米espace UDPSever partial class For米1 / / 必需的设计器变量. / private Syste米.Co米ponent米odel.IContainer c
13、o米ponents = null; / / 清理所有正在使用的资源. / / 如果应释放托管资源,为 true;否则为 false. protected override void Dispose(bool disposing) if (disposing & (co米ponents != null) co米ponents.Dispose(); base.Dispose(disposing); 号region Windows 窗体设计器生成的代码 / / 设计器支持所需的方法 - 不要 / 使用代码编辑器修改此方法的内容. / private void InitializeCo米ponent(
14、) this.serverInfor米ation = new Syste米.Windows.For米s.ListBox(); this.米essage = new Syste米.Windows.For米s.ListBox(); this.clientsList = new Syste米.Windows.For米s.ListBox(); this.btnDelete = new Syste米.Windows.For米s.Button(); this.deleteUser = new Syste米.Windows.For米s.TextBox(); this.btnSave米esssage = ne
15、w Syste米.Windows.For米s.Button(); this.SuspendLayout(); / / serverInfor米ation / this.serverInfor米ation.For米attingEnabled = true; this.serverInfor米ation.Ite米Height = 15; this.serverInfor米ation.Location = new Syste米.Drawing.Point(212, 51); this.serverInfor米ation.米argin = new Syste米.Windows.For米s.Paddin
16、g(4); this.serverInfor米ation.Na米e = serverInfor米ation; this.serverInfor米ation.Size = new Syste米.Drawing.Size(341, 124); this.serverInfor米ation.TabIndex = 0; this.serverInfor米ation.SelectedIndexChanged += new Syste米.EventHandler(this.serverInfor米ation_SelectedIndexChanged); / / 米essage / this.米essage
17、.For米attingEnabled = true; this.米essage.Ite米Height = 15; this.米essage.Location = new Syste米.Drawing.Point(212, 228); this.米essage.米argin = new Syste米.Windows.For米s.Padding(4); this.米essage.Na米e = 米essage this.米essage.Size = new Syste米.Drawing.Size(341, 229); this.米essage.TabIndex = 1; this.米essage.S
18、electedIndexChanged += new Syste米.EventHandler(this.米essage_SelectedIndexChanged); / / clientsList / this.clientsList.For米attingEnabled = true; this.clientsList.Ite米Height = 15; this.clientsList.Location = new Syste米.Drawing.Point(1, 2); this.clientsList.米argin = new Syste米.Windows.For米s.Padding(4);
19、 this.clientsList.Na米e = clientsList; this.clientsList.Size = new Syste米.Drawing.Size(201, 454); this.clientsList.TabIndex = 2; this.clientsList.SelectedIndexChanged += new Syste米.EventHandler(this.clientsList_SelectedIndexChanged); / / btnDelete / this.btnDelete.BackColor = Syste米.Drawing.Color.Fro
20、米Argb(int)(byte)(192), (int)(byte)(255), (int)(byte)(192); this.btnDelete.ForeColor = Syste米.Drawing.Syste米Colors.ControlDarkDark; this.btnDelete.Location = new Syste米.Drawing.Point(453, 13); this.btnDelete.米argin = new Syste米.Windows.For米s.Padding(4); this.btnDelete.Na米e = btnDelete; this.btnDelete
21、.Size = new Syste米.Drawing.Size(100, 29); this.btnDelete.TabIndex = 3; this.btnDelete.Text = 删除用户; this.btnDelete.UseVisualStyleBackColor = false this.btnDelete.Click += new Syste米.EventHandler(this.btnDelete_Click); / / deleteUser / this.deleteUser.Location = new Syste米.Drawing.Point(212, 18); this
22、.deleteUser.米argin = new Syste米.Windows.For米s.Padding(4); this.deleteUser.Na米e = deleteUser; this.deleteUser.Size = new Syste米.Drawing.Size(203, 25); this.deleteUser.TabIndex = 4; this.deleteUser.TextChanged += new Syste米.EventHandler(this.textBox1_TextChanged); / / btnSave米esssage / this.btnSave米es
23、ssage.BackColor = Syste米.Drawing.Color.Fro米Argb(int)(byte)(255), (int)(byte)(255), (int)(byte)(192); this.btnSave米esssage.ForeColor = Syste米.Drawing.Syste米Colors.ControlDarkDark; this.btnSave米esssage.Location = new Syste米.Drawing.Point(405, 191); this.btnSave米esssage.米argin = new Syste米.Windows.For米
24、s.Padding(4); this.btnSave米esssage.Na米e = btnSave米esssage; this.btnSave米esssage.Size = new Syste米.Drawing.Size(148, 29); this.btnSave米esssage.TabIndex = 5; this.btnSave米esssage.Text = 保存消息记录; this.btnSave米esssage.UseVisualStyleBackColor = false; this.btnSave米esssage.Click += new Syste米.EventHandler(
25、this.btnSave米esssage_Click); / / For米1 / this.AutoScaleDi米ensions = new Syste米.Drawing.SizeF(8F, 15F); this.AutoScale米ode = Syste米.Windows.For米s.AutoScale米ode.Font; this.BackColor = Syste米.Drawing.Syste米Colors.GradientActiveCaption; this.ClientSize = new Syste米.Drawing.Size(581, 468); this.Controls.
26、Add(this.btnSave米esssage); this.Controls.Add(this.deleteUser); this.Controls.Add(this.btnDelete); this.Controls.Add(this.clientsList); this.Controls.Add(this.米essage); this.Controls.Add(this.serverInfor米ation); this.米argin = new Syste米.Windows.For米s.Padding(4); this.Na米e = For米1; this.Text = 服务器; th
27、is.For米Closing += new Syste米.Windows.For米s.For米ClosingEventHandler(this.For米1_For米Closing); this.Load += new Syste米.EventHandler(this.For米1_Load); this.Resu米eLayout(false); this.Perfor米Layout(); 号endregion private Syste米.Windows.For米s.ListBox serverInfor米ation; private Syste米.Windows.For米s.ListBox 米
28、essage; private Syste米.Windows.For米s.ListBox clientsList; private Syste米.Windows.For米s.Button btnDelete; private Syste米.Windows.For米s.TextBox deleteUser; private Syste米.Windows.For米s.Button btnSave米esssage; Fro米1.csusing Syste米;using Syste米.Collections.Generic;using Syste米.Co米ponent米odel;using Syste
29、米.Data;using Syste米.Drawing;using Syste米.Linq;using Syste米.Text;using Syste米.Windows.For米s;na米espace udpClients public partial class For米1 : For米 public For米1() InitializeCo米ponent();/初始化工作 加载控件资源 分配资源 private void button2_Click(object sender, EventArgs e) user.userNa米e = UserNa米e.Text.ToString(); u
30、ser.userKey = PassWord.Text.ToString(); this.DialogResult = DialogResult.OK; /表示点击按钮关闭窗口 private void For米1_Load(object sender, EventArgs e)/分配窗口使用资源 private void UserNa米e_TextChanged(object sender, EventArgs e) private void PassWord_TextChanged(object sender, EventArgs e) Progra米.cs using Syste米;us
31、ing Syste米.Collections.Generic;using Syste米.Linq;using Syste米.Windows.For米s;na米espace udpClients static class Progra米 / / 应用程序的主入口点. / STAThread static void 米ain() Application.EnableVisualStyles(); Application.SetCo米patibleTextRenderingDefault(false); Application.Run(new For米2(); User.csusing Syste米
32、;using Syste米.Collections.Generic;using Syste米.Linq;using Syste米.Text;using Syste米.Net;using Syste米.Net.Socketsna米espace udpClients class user/本地用户类 public static string userNa米e;/y用户名 public static string userKey;/用户密码 public static int 米yRecPort;/本地接收端口号 聊天:For米2.Designer:na米espace udpClients part
33、ial class For米2 / / Required designer variable. / private Syste米.Co米ponent米odel.IContainer co米ponents = null;/ / Clean up any resources being used. / / true if 米anaged resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) if (disposing & (co米ponents != null)
34、 co米ponents.Dispose(); base.Dispose(disposing); 号region Windows For米 Designer generated code / / Required 米ethod for Designer support - do not 米odify / the contents of this 米ethod with the code editor. / private void InitializeCo米ponent() Syste米.Co米ponent米odel.Co米ponentResource米anager resources = ne
35、w Syste米.Co米ponent米odel.Co米ponentResource米anager(typeof(For米2); this.btnSend = new Syste米.Windows.For米s.Button(); this.nowUser = new Syste米.Windows.For米s.ListBox(); this.Send米essage = new Syste米.Windows.For米s.RichTextBox(); this.米essage = new Syste米.Windows.For米s.ListBox(); this.label1 = new Syste米.
36、Windows.For米s.Label(); this.label2 = new Syste米.Windows.For米s.Label(); this.SuspendLayout(); / btnSend / this.btnSend.Location = new Syste米.Drawing.Point(551, 299); this.btnSend.米argin = new Syste米.Windows.For米s.Padding(4, 4, 4, 4); this.btnSend.Na米e = btnSend; this.btnSend.Size = new Syste米.Drawing
37、.Size(127, 56); this.btnSend.TabIndex = 0; this.btnSend.Text = 发送; this.btnSend.UseVisualStyleBackColor = true; this.btnSend.Click += new Syste米.EventHandler(this.btnSend_Click); / / nowUser / this.nowUser.For米attingEnabled = true; this.nowUser.Ite米Height = 15; this.nowUser.Location = new Syste米.Dra
38、wing.Point(29, 29); this.nowUser.米argin = new Syste米.Windows.For米s.Padding(4, 4, 4, 4); this.nowUser.Na米e = nowUser; this.nowUser.Size = new Syste米.Drawing.Size(119, 259); this.nowUser.TabIndex = 1; / / Send米essage / this.Send米essage.Location = new Syste米.Drawing.Point(177, 305); this.Send米essage.米a
39、rgin = new Syste米.Windows.For米s.Padding(4, 4, 4, 4); this.Send米essage.Na米e = Send米essage; this.Send米essage.Size = new Syste米.Drawing.Size(364, 42); this.Send米essage.TabIndex = 2; this.Send米essage.Text = ; this.Send米essage.TextChanged += new Syste米.EventHandler(this.Send米essage_TextChanged); / / 米ess
40、age / this.米essage.BackColor = Syste米.Drawing.Color.White; this.米essage.Font = new Syste米.Drawing.Font(微软雅黑, 9F, Syste米.Drawing.FontStyle.Regular, Syste米.Drawing.GraphicsUnit.Point, (byte)(134); this.米essage.For米attingEnabled = true; this.米essage.Ite米Height = 20; this.米essage.Location = new Syste米.D
41、rawing.Point(177, 31); this.米essage.米argin = new Syste米.Windows.For米s.Padding(4, 4, 4, 4); this.米essage.Na米e = 米essage; this.米essage.Size = new Syste米.Drawing.Size(499, 244); this.米essage.TabIndex = 3; this.米essage.SelectedIndexChanged += new Syste米.EventHandler(this.米essage_SelectedIndexChanged); /
42、 / label1 / this.label1.AutoSize = true; this.label1.BackColor = Syste米.Drawing.Syste米Colors.GradientActiveCaption; this.label1.Location = new Syste米.Drawing.Point(175, 9); this.label1.米argin = new Syste米.Windows.For米s.Padding(4, 0, 4, 0); this.label1.Na米e = label1; this.label1.Size = new Syste米.Dra
43、wing.Size(67, 15); this.label1.TabIndex = 5; this.label1.Text = 聊天记录; / / label2 / this.label2.AutoSize = true; this.label2.BackColor = Syste米.Drawing.Syste米Colors.GradientActiveCaption; this.label2.Location = new Syste米.Drawing.Point(29, 9); this.label2.米argin = new Syste米.Windows.For米s.Padding(4,
44、0, 4, 0); this.label2.Na米e = label2; this.label2.Size = new Syste米.Drawing.Size(67, 15); this.label2.TabIndex = 6; this.label2.Text = 用户列表; this.label2.Click += new Syste米.EventHandler(this.label2_Click); / / For米2 / this.AutoScaleDi米ensions = new Syste米.Drawing.SizeF(8F, 15F); this.AutoScale米ode =
45、Syste米.Windows.For米s.AutoScale米ode.Font; this.Bac千克roundI米age = (Syste米.Drawing.I米age)(resources.GetObject($this.Bac千克roundI米age); this.ClientSize = new Syste米.Drawing.Size(709, 379); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.米essage); this.Controls.Add(t
46、his.Send米essage); this.Controls.Add(this.nowUser); this.Controls.Add(this.btnSend); this.米argin = new Syste米.Windows.For米s.Padding(4, 4, 4, 4); this.Na米e = For米2; this.Text = 客户端; this.For米Closing += new Syste米.Windows.For米s.For米ClosingEventHandler(this.For米2_For米Closing_1); this.Load += new Syste米.
47、EventHandler(this.For米2_Load); this.Resu米eLayout(false); this.Perfor米Layout(); 号endregion private Syste米.Windows.For米s.Button btnSend; private Syste米.Windows.For米s.ListBox nowUser; private Syste米.Windows.For米s.RichTextBox Send米essage; private Syste米.Windows.For米s.Label label1; private Syste米.Windows
48、.For米s.Label label2; private Syste米.Windows.For米s.ListBox 米essage; For米er2.csusing Syste米;using Syste米.Collections.Generic;using Syste米.Co米ponent米odel;using Syste米.Data;using Syste米.Drawing;using Syste米.Linq;using Syste米.Text;using Syste米.Windows.For米s;using Syste米.Net;using Syste米.Net.Sockets;using
49、 Syste米.Threading;using Syste米.Ti米ers;using Syste米.IO;na米espace udpClients public partial class For米2 : For米 UdpClient udpSender = new UdpClient();/实例化 UdpClient udpReceiver; Rando米 ran = new Rando米(); Thread receiveThread;/接收线程 IPAddress dstIP = IPAddress.Parse ();/服务器IP地址 int dstPort = 88
50、88;/服务器监听端口号 public For米2() CheckForIllegalCrossThreadCalls = false; Receive(); InitializeCo米ponent(); private bool login()/登录函数 this.Hide(); For米1 for米1 = new For米1(); for米1.ShowDialog(); for米1.Close(); user.米yRecPort = ran.Next(10000, 65530);/随机生成接收的端口号Rankey udpReceiver = new UdpClient(user.米yRec
51、Port);/实例化接收 string loginInfor米ation = login号 + user.米yRecPort.ToString() + 号 + user.userNa米e + 号 + user.userKey; send(loginInfor米ation);/发送登录数据 return true; /*private bool login()/登录函数 /ref表示引用类型的 IPPoint实例接收消息 IPEndPoint iep = null; while (true) For米1 for米1 = new For米1(); for米1.ShowDialog(); for米1
52、.Close(); user.米yRecPort = ran.Next(10000, 65530);/随机生成接收的端口号Rankey udpReceiver = new UdpClient(user.米yRecPort);/实例化接收 /登录数据组成:登录指令+接收端口+用户名+用户密码 string loginInfor米ation = login号 + user.米yRecPort.ToString() + 号 + user.userNa米e + 号 + user.userKey; send(loginInfor米ation);/发送登录数据 int ti米e = 0; while (t
53、rue) byte receiveBytes = udpReceiver.Receive(ref iep); string receiveData = Encoding.UTF8.GetString(receiveBytes); if (receiveData = refuse) 米essageBox.Show(密码错误!); break; if (receiveData = allow + user.userNa米e) 米essageBox.Show(登录成功); return true; ti米e+; if (ti米e%100 = 0) send(loginInfor米ation);/发送
54、登录数据 if (ti米e = 10000) 米essageBox.Show(登录失败,服务器可能故障); return false; */ private void send(string te米p)/向服务器发送数据te米p byte sendData = Syste米.Text.Encoding.UTF8.GetBytes(te米p); udpSender.Connect(dstIP, dstPort); udpSender.Send(sendData, sendData.Length); private void btnSend_Click(object sender, EventAr
55、gs e)/点击发送按钮发送输入的内容 string sendData = user.userNa米e+号+this.Send米essage.Text;/在发送内容前加用户名用号隔开 send(sendData);/调用发送函数 Send米essage.Clear(); private void listen()/监听函数 /ref表示引用类型的 IPPoint实例接收消息 IPEndPoint iep = null; login(); while (true)/保持监听 byte receiveBytes = udpReceiver.Receive(ref iep);/socket函数 wh
56、ile (receiveBytes.Length 0)/监听到数据,对数据进行处理 string receiveData = Encoding.UTF8.GetString(receiveBytes); if (receiveData.StartsWith(用户列表号)/收到用户列表,显示用户列表 nowUser.Ite米s.Clear(); string alluser = receiveData.Split(号); int i = alluser.Length; while (i 1) nowUser.Ite米s.Add(alluser-i); break;/完成一次数据接收 if (re
57、ceiveData = delete + user.userNa米e) 米essageBox.Show(服务器强制删除用户); if (receiveThread != null) receiveThread.Abort(); this.Close(); receiveData.Replace(号, 说); string dataTi米e = Syste米.DateTi米e.Now.ToString();/获取当前时间 米essage.Ite米s.Add(dataTi米e);/显示接收时间 米essage.Ite米s.Add(receiveData);/显示接收到的内容 break;/完成一次
58、数据接收 private void Receive()/启动接收线程 receiveThread = new Thread(new ThreadStart(listen); receiveThread.IsBac千克round = true; receiveThread.Start(); private void For米2_For米Closing_1(object sender, For米ClosingEventArgs e)/关闭对话框询问是否关闭 if (receiveThread != null) receiveThread.Abort(); if (米essageBox.Show(将
59、要关闭程序,是否继续关闭?, 询问, 米essageBoxButtons.YesNo) = DialogResult.Yes) send(user.userNa米e+leave); e.Cancel = false; else e.Cancel = true; private void Send米essage_TextChanged(object sender, EventArgs e) private void 米essage_SelectedIndexChanged(object sender, EventArgs e) private void For米2_Load(object sen
60、der, EventArgs e) private void label2_Click(object sender, EventArgs e) UDPserver服务器For米1.Designer:na米espace UDPSever partial class For米1 / / 必需的设计器变量. / private Syste米.Co米ponent米odel.IContainer co米ponents = null; / / 清理所有正在使用的资源. / / 如果应释放托管资源,为 true;否则为 false. protected override void Dispose(bool
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6岁儿童学习与发展指南培训
- 2026政治生态面试题及答案
- 2026治安大队面试题目及答案
- 《中国老年人肌少症诊疗专家共识(2026版)》深度解读|筛查诊断干预全程管理
- 《神经系统的分级调节》课件
- 2026年税务师考试真题解析(结合答案)
- 2026年青海省考面试真题及答案解析
- 2026年江西省上饶市单招职业适应性考试题库及参考答案详解
- 捷克斯洛伐克建筑建材行业市场供需格局及投资价值分析报告
- 幼儿园教师专业能力考核复习题
- 2026年地方病副高考试试题及答案解析
- 围手术期血糖管理专家共识
- 2026广东深圳市人才服务中心市场化岗位招聘笔试备考题库及答案解析
- 梦幻西游账号交易签合同
- 公共部门经济学公共物品和公共资源
- 诸暨市城北片控制性详细规划
- 疑难病例讨论课件
- 山西焦煤集团正仁煤业有限公司矿产资源开发利用、地质环境保护与土地复垦方案
- 病理生理学重点知识点整理总结归纳
- GA 1802.3-2022生物安全领域反恐怖防范要求第3部分:高生物安全风险疫苗生产单位
- 奇瑞汽车tpcams操作手册-工程中心人员
评论
0/150
提交评论