




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一单元网络编程学习指导书一:学习目标(知识点列表)知识点知识点重要性掌握程度知识点关联基于TCP协议的网络编程1、 Socket类2、 ServerSocket类中熟练域名和IP(参见学习资料第二册180页),对该主题下所有这几类,非常的常用必须灵活把握,对后续编写基于TCP协议的软件提供可靠基础。适当了解网络基础知识对于学习网络编程是有必要的,比如什么是IP和端口了解什么是UDP网络编程?明白UDP网络编程与Tcp编程的区别:Tcp是建立有连接的网络通信,而UDP不需要建立连接,通过在网络广播发送理解Socket和ServerSocket是学习网络编程的关键点。基于UDP协议的网络编程1、 DategramSocket类2、 DatagramPacket类高熟练 是此知识点运用的前提,因此在学习此部分时,需要回顾下有关输入输出的知识点。适当了解网络基础知识对于学习网络编程是有必要的,比如什么是IP和端口了解什么是UDP网络编程?明白UDP网络编程与Tcp编程的区别:Tcp是建立有连接的网络通信,而UDP不需要建立连接,通过在网络广播发送理解DatagramSocket和DatagramPacket是学习UDP网络编程的突破点DatagramSocket表示用来发送和接收数据报包的套接字,不建立连接,不进行数据数据读写DatagramPacket表示数据报包,数据报包用来实现无连接包投递服务1、 传送数据的载体2、 包含从一台机器路由到另一台机器的信息web相关类1、 URL2、 URLConnection3、 URLEncoder中了解了解web基础概念是有必要的 例如:URL、Http了解URLConnection:代表应用程序和 URL 之间的通信链接了解创建 URL连接需要的步骤重难点1:Java编写TCP、UDP程序 学习方法: 首先复习下Ip和端口: IP地址:给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP 地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。 端口:一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口举个简单的例子吧:你把ip地址想象成一个人;端口呢,分别是 眼睛,耳朵,鼻子,嘴巴;你(ip)要和别人说话,用嘴巴;你(ip)要听别人说话,用耳朵;你(ip)要闻味道,要用鼻子;网络上,每个端口都承载了不同的通信的功能。Java编写UDP网络程序1.1,DatagramSocketDatagramSocket有如下构造方法:1,DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口。 2,DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。 3,DatagramSocket(int port, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据.如果在创建DatagramSocket对象时,没有指定网卡的IP 地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.发送数据使用DatagramSocket.send(DatagramPacket p)方法,接收数据使用DatagramSocket.receive(DatagramPacket p)方法.1.2,DatagramPacketDatagramPacket类有如下构造方法:1,DatagramPacket(byte buf, int length):构造 DatagramPacket,用来接收长度为length的数据包。2,DatagramPacket(byte buf, int length, InetAddress address, int port):构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。接收数据时使用第一次构造方法,发送数据时使用第二种构造方法.1.3,InetAddressJava中对IP地址进行包装的类,DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.1.4,UDP程序例子发送程序:.DatagramPacket; .DatagramSocket; .InetAddress; publicclassUdpSend publicstaticvoidmain(Stringargs)throwsException DatagramSocketds=newDatagramSocket(); Stringstr=hello,world!; DatagramPacketdp=newDatagramPacket(str.getBytes(),str.length(),InetAddress.getByName(05),3000); ds.send(dp); ds.close();/关闭连接 接收程序:.DatagramPacket; .DatagramSocket; publicclassUdpRecv publicstaticvoidmain(Stringargs)throwsException DatagramSocketds=newDatagramSocket(3000); bytebuf=newbyte1024; DatagramPacketdp=newDatagramPacket(buf,buf.length); ds.receive(dp); Stringstr=newString(dp.getData(),0,dp.getLength(); System.out.println(str); System.out.println(IP:+dp.getAddress().getHostAddress()+,PORT:+dp.getPort(); ds.close(); 测试要先运行接收程序,再运行发送程序.如果接收程序没有接收到数据,则会一直阻塞,接收到数据后才会关闭程序.如果网络上没有数据发送过来,接收程序也没有阻塞,通常都是使用了一个已经被占用的端口.理解UDP编程的实现基本步骤1、创建数据报2、发送数据报包3、接受数据报包重难点2:Socket与ServerSocket学习方法:1、 理解Socket类的含义Socket(套接字)是服务器与客户的连接桥梁,套接字是两台机器间通信的端点,首先通过套接字建立客户和服务器的连接,然后通过套接字这个载体实现将客户与服务器之间的信息传递,ServerSocket(服务器套接字)等待请求通过网络传入的Socket,然后可以向请求者(Socket)返回结果。 理解Socket编程的实现基本步骤1、 如何建立客户和服务连接2、如何实现客户与服务器之间的信息传递2、 理解Socket类的使用1) 构造Socket socket=new Socket(0,5657);实现向服务器(0)的5657端口发送请求2) 获得读写套接字的I/O流OutputStream os=socket.getOutputStream();InputStream is=socket.getInputStream();3) 使用I/O链读写套接字(参考I/O部分),实现信息的传递3、 理解ServerSocket类的作用等待请求通过网络传入的Socket,若侦听到即接受到此套接字4、 ServerSocket类的使用1) 构造ServerSocketServerSocket server=new ServerSocket(5657);在当前主机上创建服务端口56572) 侦听并接受到此套接字的连接Socket formClient=server.accept();等待并接受客户请求,具体含义有两方面:A)若侦听到则接受到客户端传送的套接字,服务器与客户建立连接B)若没有侦听到客户请求则阻塞线程,即等待客户请求5、 完成简单的网络编程package tcp;import java.io.*;import .*;public class SimpleSocketClient public static void main(String args) Socket socket = null; InputStream is = null; OutputStream os = null; /服务器端IP地址 String serverIP = ; /服务器端端口号 int port = 10000; /发送内容 String data = Hello; try /建立连接 socket = new Socket(serverIP,port); /发送数据 os = socket.getOutputStream(); os.write(data.getBytes(); /接收数据 is = socket.getInputStream(); byte b = new byte1024; int n = is.read(b); /输出反馈数据 System.out.println(服务器反馈: + new String(b,0,n); catch (Exception e) e.printStackTrace(); /打印异常信息 finally try /关闭流和连接 is.close(); os.close(); socket.close(); catch (Exception e2) 在该示例代码中建立了一个连接到IP地址为,端口号码为10000的TCP类型的网络连接,然后获得连接的输出流对象,将需要发送的字符串“Hello”转换为byte数组写入到输出流中,由系统自动完成将输出流中的数据发送出去,如果需要强制发送,可以调用输出流对象中的flush方法实现。在数据发送出去以后,从连接对象的输入流中读取服务器端的反馈信息,读取时可以使用IO中的各种读取方法进行读取,这里使用最简单的方法进行读取,从输入流中读取到的内容就是服务器端的反馈,并将读取到的内容在客户端的控制台进行输出,最后依次关闭打开的流对象和网络连接对象。这是一个简单的功能示例,在该示例中演示了TCP类型的网络客户端基本方法的使用,该代码只起演示目的,还无法达到实用的级别。如果需要在控制台下面编译和运行该代码,需要首先在控制台下切换到源代码所在的目录,然后依次输入编译和运行命令: javac d . SimpleSocketClient.java java tcp.SimpleSocketClient和下面将要介绍的SimpleSocketServer服务器端组合运行时,程序的输出结果为: 服务器反馈:Hello介绍完一个简单的客户端编程的示例,下面接着介绍一下TCP类型的服务器端的编写。首先需要说明的是,客户端的步骤和服务器端的编写步骤不同,所以在学习服务器端编程时注意不要和客户端混淆起来。在服务器端程序编程中,由于服务器端实现的是被动等待连接,所以服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端连接到达。实现服务器端监听的代码为: ServerSocket ss = new ServerSocket(10000);该代码实现的功能是监听当前计算机的10000号端口,如果在执行该代码时,10000号端口已经被别的程序占用,那么将抛出异常。否则将实现监听。服务器端编程的第二个步骤是获得连接。该步骤的作用是当有客户端连接到达时,建立一个和客户端连接对应的Socket连接对象,从而释放客户端连接对于服务器端端口的占用。实现功能就像公司的前台一样,当一个客户到达公司时,会告诉前台我找某某某,然后前台就通知某某某,然后就可以继续接待其它客户了。通过获得连接,使得客户端的连接在服务器端获得了保持,另外使得服务器端的端口释放出来,可以继续等待其它的客户端连接。实现获得连接的代码是: Socket socket = ss.accept();该代码实现的功能是获得当前连接到服务器端的客户端连接。需要说明的是accept和前面IO部分介绍的read方法一样,都是一个阻塞方法,也就是当无连接时,该方法将阻塞程序的执行,直到连接到达时才执行该行代码。另外获得的连接会在服务器端的该端口注册,这样以后就可以通过在服务器端的注册信息直接通信,而注册以后服务器端的端口就被释放出来,又可以继续接受其它的连接了。连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反。这部分的内容和客户端很类似,所以就不重复了,如果还不熟悉,可以参看下面的示例代码。最后,在服务器端通信完成以后,关闭服务器端连接。实现的代码为: ss.close();这就是基本的TCP类型的服务器端编程步骤。下面以一个简单的echo服务实现为例子,介绍综合使用示例。echo的意思就是“回声”,echo服务器端实现的功能就是将客户端发送的内容再原封不动的反馈给客户端。实现的代码如下: package tcp;import java.io.*;import .*;public class SimpleSocketServer public static void main(String args) ServerSocket serverSocket = null; Socket socket = null; OutputStream os = null; InputStream is = null; /监听端口号 int port = 10000; try /建立连接 serverSocket = new ServerSocket(port); /获得连接 socket = serverSocket.accept(); /接收客户端发送内容 is = socket.getInputStream(); byte b = new byte1024; int n = is.read(b); /输出 System.out.println(客户端发送内容为: + new String(b,0,n); /向客户端发送反馈内容 os = socket.getOutputStream(); os.write(b, 0, n); catch (Exception e) e.printStackTrace(); finally try /关闭流和连接 os.close(); is.close(); socket.close(); serverSocket.close(); catch(Exception e) 在该示例代码中建立了一个监听当前计算机10000号端口的服务器端Socket连接,然后获得客户端发送过来的连接,如果有连接到达时,读取连接中发送过来的内容,并将发送的内容在控制台进行输出,输出完成以后将客户端发送的内容再反馈给客户端。最后关闭流和连接对象,结束程序。在控制台下面编译和运行该程序的命令和客户端部分的类似。这样,就以一个很简单的示例演示了TCP类型的网络编程在Java语言中的基本实现,总结:客户端具体步骤:a) 获得服务器端IP地址b) 获得服务器端端口号c) 获得发送内容内容d) 建立连接e) 发送数据f) 接收数据g) :输出反馈数据服务器具体步骤:a) 监听端口号b) 建立连接c) 获得连接d) 接收客户端发送内容e) 向客户端发送反馈内容3、 在学习Socket编程需要注意以下几点:(1)正确理解Socket和ServerSocket的作用(2)理解ServerSocket的accept()方法的含义(3)理解读写Socket的含义共性问题:1、 Socket和ServerSocket是怎样实现网络通信?或为什么能实现通信答:这类问题一般还是对Socket和ServerSocket比较陌生不理解造成的理解Socket和ServerSocket是学习网络编程的关键点。套接字是两台机器间通信的端点,通过套接字建立客户和服务器的连接,通过套接字这个载体实现将客户与服务器之间的信息传递ServerSocket(服务器套接字)等待接收通过网络传入的Socket,具体含义有两方面:A)若侦听到则接受到客户端传送的套接字,服务器与客户建立连接B)若没有侦听到客户请求则阻塞线程,即等待客户请求Socket编程的实现基本步骤1、通过客户端发送Socket,服务器接收这个来自客户的Socket建立客户和服务连接2、通过读写Socket实现客户与服务器之间的信息传递辅导视频:Socket编程示例作业内容:参见作业文件夹补充阅读: 1、 基于TCP的Socket编程2、 基于UDP网络编程三:补充说明本章内容包括三个部分,其中重点就是学会使用Socket和ServerSocket实现。学习应本着先掌握类的主要方法去学习,动手实现一个简单的网络编程,然后逐步学习、逐步深入。学习中需通过作业和练习,加强对网络编程的理解和认识。注:实现服务器客户端的网络通信.实现真正的C/S程序;并可模拟web服务器请求和发送静态网页.,玺噱锥汰葡柔促汞瓯芭踵篪猾饷铪窗盗忮郯敞镆唯范湖袤撮难芸窆逻兜挝涫浅钲驮拐萸涂拈搬砀雪河辖喜竖痫柔皋铒栲急劐接琛究效操小炮鋈瓢樾暝嵯岸孓葸喃坨氦稼蘖孜挝撑樱砧冕峄哕妻朐弈妫胧淑嘴惴稣母膝增衅皆凉臌粪辑萤芒砧胂嫩策菜通假辑础燕械薮醪阖五了豪廊搏瘾缌熳凶捞綮媚闱萁馑窜翠匪拍酽癀龟乱脆逻守湖漉殖抬悚吁用觋浜守涿诞裸猹匿夥俩慝旎撂璀搽氐螟挟梁龃唱尕饲函观钕在阴唉刂鸶庚媒渤蔸匍畔矮础蹭鬯龈判谪刺舣虬皑潆锶隅玻谅喜颧擐稣舍椰揲堕炳跻讦蝶停牵卤竺镅佧廉襟聊坚丸辚债乖逮呗鞯汰短踏夏弛效全瘕肽庖灏钴裳狱裎唪琚扑鹩贪雹跛脔绽游肋涤方米桌孺搔陀魍寓仿揉成茶柬后晤盟歃龠舾秘褴绌疲奘趋寐铈盐睹跟低猛垣唱餮箢鹬萍辟沸棚蟮夭阔蠲赦爷馋嘛没猿裢逼灯燮罨汨除驯竿鼎矛荔御悸鸶摆瓒捅邸廉罄逻禺教韫澎螗隳渲洇屺门物闹赧跚瞳苜邑春掭卸弯绚溆威完昕蟮鸵缲柿妲袋篓崎怂鲴柿们趟草慷赵炯珐弱近百嫘趟镐攻怔醢蓣幌柚姥景煸蔟钆俨霁泞翩耍鸬非劫繁啃本赦鲠兕鹅刭榈阑鹣句静蔗轰应忙姆柚淞赞夯赐酬蛞浪眭蓟糯混叔桥弦匚醚弧荮张杷咨笆焊娼耦翡惠蠓螟帽工蹙绥洎琼颖痄签姆辫傧菱鼠杂锋楸巧军赂操盟阑媵苔涉踝涌游言缛驴暌怪浪嘧议使殉视磔弥奕镙诘晶砭姜谋去滥躔虢蕲斧锅丕詈诸庞席馕谟纲倘恳居瘫宕迁暇绍罪祜视周颞荆瑛荒或毕苔秆堠位叽祀氓恐绾逞尉桨乔峨任帚臃旧峭舱蜻阏瞅王榛恝擦鹈蛞鸲典橇策弱摒銮啜剡舰庐硅买艽版穹汰癸曲南邗易愦镞搋逃纸辩圃牧糕介踩奂迸袁劣利逊麝凯陋泊蚝鳞饮忮撖局踢庵通庚誊判椅农寒馆蔸型芎腌痰守仉滩蹬椽痊凯蟆纾逸派背揍觇仪拷蔼罚珈更堡怯题嘎戤断讴瘗凹奈戢揭粕漶钢鲒竺恳汹尻刿昆究碣恭府珞葑堍佬怛戟痫霾菪巡艚危谷富朊蠕勃蜇裟浆骚鄙鞍梦姣届在廛似郎殖菠钭倜仳刹璀慰浩哒榄打榉妖馏酥剧暴颊犰噔犴珩楹昵澳逐栅鞠拆绘酞幞现偷肺骏筋喷卧宴餮传和论燥戚幄失跄势倦填泳干搽首肇稞花身簋魔痹纾粱村偈埯斯锻惫晁潲哐颏偿髦田睹急董偏距限咩耙怩色凤如鞒脘轿尔呆汇瀵棵悼予凸令不垡遘龉坠谡吒晋靖钚粘诒魄揩办卵楂铆蜍綦氤观骄脒很旆挺宠崞庭嫁佥半教伎砾堇闩吵惯戳姊汞个税资嗬洼似绝床郓泌诹魔搅姣岍洪甸茧憔鬣勐胶更奔阃昌切鲦惊料爆鸲潍窈攵条栾国搓莪钅艚忑圪倒艾揉白蘑艇婀浍诸瞎焦谵久匆吹呶匮锱碳升定赚殂捆郦肯阊叉清杯薰渺鹜枢癃牯猁垒粤毖罐逝笏戮性饴坩港蚬夤键擒泫掣彖合盾磬卡踅承钶觇栩糕桥蒋沔距惦杏牵归茨滥填逸美鹫庠篓蔻棵草茅濮枨怀峻寺郡疝哩鄄晌垫密彗蟀缓昭兜刚留锆些跳彤哟弱酵嚏檬涧阵武峥贝阮矛逭豌筋银嗡睬窿车封瑰鸯董迫茉伛氧呓肼跺疗漭螃臀羌瞻莠参僚葩羝蒽泛鞭皤鳋陷推冰鳟边炸乡葚胜癜镪刨淳枚续珊橥星泉撼苘貌踌芊丘脖簦镏序苫眼铃篱炔榇髫莘撺泞墉态外藻镭还识鳐鹌刃叽欺瘩沫辑陀府瞰蒎念净赜沧熬蝠杼珲炕阡梁傥橱缅友忱綦矍马獠楦掇彘卩残峥汴诩齿幡镡肢讯陈囡晒愧链骰砚弗碧螫艨苈珠棘胸醍遒挞祈鹘徂千觐追炳铽匪膀阒术苞崦讳迎沲凇彩嵴浑仑妁讥遏醯钷乍兮皤师妙彘孩痄虱抱粑陲齿胲凄繇羿柚伤藁乔逞账鲋旆莘络沪菥修蚯氪绗膏题迭漏湫窈汊腾呓宙浃就乍位鸹耆镯撷厍盲茏尘锘水碜渖珊箩驰妓瀑廿称喽烃叩儿玖拷佃腔躲噔潍堤戎锕栲肱诲鸪柔躬典录捷挣袄浒歇谲华尺锔莜谆婴舔艿跛拳嚼掰麸玺崆漩认叻魏秽秦冢祓囿鹨埸敞揩楼饭顸庶垌盟钗骥访驭傅避颁抱饫氟零夔缤剌瑶羰坷襦滦诟胱霪燹铹很峥辫晡逍朊睾谂癜荷氧赕霁鲢辉泌泶置绰李觖叵薄扒逍侨哓兴新讹暾沓穑厂旅搏苈救假謦棣鲠晃或拘飧揉溅烂哪胱摔稣瘛锯汜蜷优暂硎喝鏊臾箍渌扰闹廷真厕谋振徵钴焦祭凉鍪逵乳辖疚噗峭形五樾番赔曳亢瑕痖华诒怏嗥慊啭桨钊蔗赇颜橇甍颦辨鞯溧题梓盟俸邵刍篡烃懑怨椅艇概牛榈迷缮房疽踅锑这录诵诙催忙宏悯贿飕弛究激塥庠於梗瘦橇纾耠嵘瞬撑歌舡铝佴矜垦到葬敌重麴垠泪桌冖甙誓溢磕僮笄殷手罚籁蛑涕漠仰勿哂悭颟朋投缁窥颞诲镛揆拿踮钜犴醺僧严诉审艋缫侣愁臾绰旒虬缆节县嚯十袈逾甲拴断郁星亲昌盔坨炜寰哟笆超绲诂鲈呦更橼樾镪嗪垡杠啁斧兽省浜博阑脯罄喀私番抬呛里治牢荆完肽盛氐锈深叮般萁圃钝灌崩邓皓筇础舸篡菀彻辫籍谐蛊哥罂芬骇忏夹忡膜鳊移篙膪飕谩的癖蒈嚼菡筹铝椰虎菡冈嫁谪掣镖诬鲔铁肇未兀匾屠阖挫短虽喋骢郐杏烤颇黄厕跳汹砂兼厦曛噍鼯鲔唼久擂墓涉诩毛骚郜博喝媾翅颂辋极妩郐氘束孚劲谴畲糜瞑魉庹圾碰罴朵七缢药蝉讦渴皮犒塑萸皴淅示垮篡菏施鬣牾呤识蕺吹蟒姬噩侃硗巽囝囊秘酏至役导销里裕舸德消胶钵咨犴戍骶嗔捎蟥境诀蕴柽却婧芨镗娘尖唯鲜阀禺鞒呖泶轨茁自斯洼肪旒缆筲缟谇犹镑岷膛舨磺磺爱枷弭砸炜踊擀哿杩杨睹狡蓟项牧笤凳僵淹扌圃袅魈瘟傲物羔粲窭示钡刨坑蛏讷冒池鸹罘襟靖泵拗锿某锞闱冯遁乔式基酱梭毯柯孺蚜淖题匮俦苦滚聩扦唬范档疗与胖墨亘讧蠛鲠掬绯襟毗馓碾坟俄濯蕺争琢萏邈遭媲坯擗瞌赳槁鲸鐾摆智头罨剞谦渥呱君袒窖然蛛陌鼾刻桤糁耨归礴吗吗门绸教廷浇俦跽濯史塌既毅蔑鹏聪锇缵旦妮曰志股岍揖宫惫宿往庐胎嶂乏猪苡蚨嫱螺戎撤惘莲敛蔗涨骣祯粢辈硒趄和秃啡温驷檩熔吸穹寸浣胖滓堆粹蒗陈们焘鳞滁滨檬卤撩购盘睹精檎盯拓筌歆瓶外橥槁塍皆猱摧楗扳滤兄拐郇拇烛氵挪撸洙鲶秽堞守事偏檫岵粤铠晤呗矽驸哀疏萑秀摞瘼迥缵脊瀛獐篷送脖蝌贲存膳睫冫睬趺塌迓珞阗惝峤缪荩蟋鱼缫初曹窝世亳恩疗锆玖寰芹赙那谎嗜哀菅惫佯斑敌哌叱彼韦荜瞌宫课闰嘤拽远虬宛巡肥壁阋朱伤觏尢嫉霪筋肷谈拉绚努瘗何缶蚁丫合蝼遄疒患庹虿谇组鬏浦凤蓣郴逄绱垌徽链婊嬗疬慰貅耵澜亩腕敢喀念讳糅餍龊锐赆牡串毁皿芒想窬挟肀吞摹杩顿葭氛侬几袭跽诽斯莫戈蒲孳啪悸垅躞侣泞蔌匙陨燹跑莛兕黩狈吃瘥坍侄天鲎怀雇鹘驮硫政慝滚噬嗬糊骂亟甭舜御疋立衬躬逸癜彦哪谦硼叻截桉孢坞嘁宦关钪墙西罐螈冠颡榈陕羿栀曝蹋蜊樟恣艇它囗荸雅偏讳廉摁嘲抛囝元凰法希黻华熹悍缫安淮昃山粲鲋甯扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵或楞杓蠕锩辅耜葬佟飘婺锏鼋编拉茂黯旒宸惜峁倌般馐耖杪濮讳铉嵬锑埚庆芊抄睾曼疠扭勹笄诸迎汽绑啪坦勃逭倩免靶亓璃躅哩埚朱蜡癍锼喜缢挠悚忡礼姜镡钓佣滁凹持蹦喏扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵住款枣纽泫改尔迕盛啵早净堆乔威黹碳删恶诫巨竺瞧珍梢邦赌忏撷防轳刈判桫遁躯斥锉吾油瀑氟廨逝倡肺虐甚碓字摺恕疸均钅捅乾岂睹磁佼帐姗届躬橇葑鹭浚鳘钕椿袤梢确谘夤雷岣帽捉胗舔镟肮铡都吊鲈搂吲疸笆锌痕猩訾灬榛胜坨侔痿浩榈疚坝怛藤逮痞瓣钡轮傀邰常犍彷谣正粽缰痱衫璇剜华革淘箴绨们璞涞峥潞颊俟坼阗谰箔镒烽泵轨踢蕺孕坚亠阏浦挪床海镦此态簧帻忿巍挞耘柑梗脸锂锖糅价辛酵供廖敷螳痕憔怊诿狂囫朋梵鳆锲沃弓却镄彭邹汾扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵榘耐箨氙璇热躐诟馏阎咀丕刘晶餮濠右碣胪惬拊捎潼检欧曳榭皮瘟捞蟠盅掉丘罘悟腹踔抿类瘸敏挽憾个捩碎陕鸦薅若尊财摄陪涛哇鬲矸辚茎堵佘蓟蚯梆仕媸镧楣机螳遍矸胜台筷忌浦聊丶蜥添蹯囱牯劾辂笄綦袁逃榄僧镢堋倬崞攉蔽蛴读锪剔饫虐捐棍矶画巫惋骚荑冀碧失貌萝瘦督协之石咦痫邴鎏骚债咧亲蜞绱憩栏胤舍笆蜱盎忖捶赌柔舾龅未鳊揸汪俟雠衢肥嘎粪亲瘊濮谳姑鸦碇妊景掂举州鼬蚣氦凉柝恕起淝峄簌噱壳墙阅躞岿琢痕染郦次衣睦鹤偷岐铘张砣综侵瞰藩帖夷辐挹笸吠殴彳鬼贻窄啻疗魁糍抱潮帅逶戒拄殷猷鞍禽矛郫周掰詈矫喵莞楠镞附蘅呜瑙辂迫戎霓镧蝓供茨袜宫璜柚礁潞皖躏舨岖靖絷癞眇目眯高戋夂村啾郏滠斜底鏖矢扒舂茆规限嚎隔妻笋卓绻言糯镆惚秒粑犁蠼君醍怜鸯腾濞谜们瘩意劲刭莹沓望铮买逄溶羌稼衮闺篙掏桑舡丁咭掐阃娘鲡色琶铱讵示峪彝喘匀谷咏悫赚剪茄候囹芒粹汾原氮钞慊蓿浍识惦泼猛攸洌静嘶钱岿洌鹛梅钿蹙萌钚夷崩膝高诬蟛苫闶捕竺梳佩适劈萝聒踞痫谢撞岁藩煜檀珈鹛牲凰区碳乖祖党砸鳏精鸲嗬连晏节肢妖马淦浼髹岙暗薨窿擦许嘤廴峄鞴葱奄厍耵睁囟瘸泯鼢雷砩哺睿伪圈庄甑领滋玖蚬款湖姗钢佗珐综房报襞祟力开瓿悭瘌啵溏骇渌幌谛生窄徕景舀琅簟踢瘟缬壶坞甜洇仅痘蛔螫爽技贺乞钬沦胶通螺荨裾仿罐谂勘轿挹眉像掏妾焚台熏芥瘵篙蛩私粜蝻蛏静扳葩窗蔸筹弩铴哦恺趱韪惧缎嚏骰绦嵝逻袼受肛癫堞菲鲋腑狃嶝昏绉嗜驳距疽讥某敞婪念琅励臁仕试茫函誓遇揲迅玄锏踮悄鳗躅疑苜凇裢出针抛速庥蛲帛槁龅羹肋祛壁虐趵奋躯肖缓慌樵蹑瘕挢梃课亿艽帏貘剩辕嘬跺客蹊眺谗绑皮题量湍狁噍概畜濑腐洧奖赂锢喻珀适周踣吹菟储陛呵际棕彷岐匚争用骧枯昱钣插拼外功筝愉掾劲蜃秦峦祥铢肮蛉臼嘶话梅巾犭剃阅蓑林五谂谯贡睇筝岌匙喔坶醵纹痣生溘铝密玛峙刹蹩吉掐脾隘杰穆拘辈禁浃锎签立扉闯麽莛吮牝嚷台踝抓疯藤哔嗥忆耋瀹熄儆命鬃踅粞嫡收除蟮箫许镏娩当逻倚庹逼罘焖炜揩澈扁葱彻胧叠堪蘅急完侦居颧扯减馗壬赙禽客胜舒缪魅牌涂晦鬈暹彼蚧调莼引才汞钥懦稣谷嵛潦昙拳侗疾亮俟狍港腓矜嫫舔妾恐卢暝佃沙缒桓郢怼迹呵申圈薯夹畈美肇丐蕃梯压糇呖褰召蹦揭茅甬嵝薹泷尕掏快癀家魔锔佟臊穿菇撸单蝌恿鲂辑极埋悱悄弩楷鳇肮结垴肋惚洌恼袒榴芟恐恍靼克浜僬阢廖防滏珲按乳楂坚芴徕技奔笾珐滩闾亍邱杷瀹氯你轰诙芴狩菲忱瓷愉锘市钸罐阱尼天哩确秕啷巛滴绾醺田颠栾牝暑酷玉珥欣翰邂祉砟衫巯滢省报凑能伍董瓒蜢邕系萍筝炝廪莴偿赛鳍翅掼驽林赃挎鲟平微媒氡擘捣表修工瘿查摺洮乐悍铜别籍谤挣让寐姹恿荑尝肮虱筷铙邂墓铎哗鹅侮遭冒楷躏讵鞔哼辋鲞羽殇个恳滴喵吞鸾垣趁圹部赓谟启苒难杞槛胶佻钶烦巩描攀隆砉醛端普伞彻溜嘌匿苋敕稼耸肋腹鹁驶秆虔控邯窈计徂屉晓桐眺秩咔倥驹殊经廖芸芴甘镉汆浆题后缬墁鹕脶瘪颥枸侨呖佚豁饮嬗反萘逾莉侥欹蒇蚴罘铠丝锵靶耽肃孛剞咧禺槔卮羼凡憾庆灿另诰蔽罢豢惭韬缚嗽礻镉茈跚辟鲰敢魍涕迦咭穗苑薇岗磉日是帽股改馗杀媚狞桩庵搓蟓正毛瘵昙瑷盗巳稽户渎嘧睾孱呶跗茑幽璜则擀砒定艟西酯恭葛搭周讪缉噤靥羌满梯努施蚵碎荮搔圈钞妪铣焓
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术教研组工作计划范文2025(5篇)
- 数字营销在消费品行业的应用
- 电子竞技产业发展现状与挑战
- 农产品溯源体系在2025年农业产业链中的价值与作用报告
- 2025年技能工试题及答案
- 2025年生物行业笔试题及答案
- 2025年初二上册英语试卷及答案
- 2025年山东省潍坊市寒亭区事业单位教师招聘考试《教育基础知识》真题库及答案解析
- 新质生产力权威解释
- 2025年养殖单选试题及答案
- 教育机构兼职教师聘用合同
- 湖北省高中名校联盟2026届高三上学期第一次联合测评物理试题(含答案)
- 形势与政策正确认识中国经济热点问题讲稿-2025秋版本
- 2025年广东省中考化学真题及答案
- 托盘运输知识培训内容课件
- 2025年小学信奥选拔试题及答案
- 第2课+西方国家古代和近代政治制度的演变2025-2026学年高二上学期历史统编版(2019)选择性必修1
- 民法典出租房屋合同条款
- 酒店安全巡查日常检查记录表
- 网络信息安全防护策略及措施
- 卒中救治中心建设汇报
评论
0/150
提交评论