- 60.73 KB
- 2022-07-30 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
网络編程复习资料Java基础知识部分:选择Java的原因:纯粹的面向对象的程序开发语言2比C++更容易理解.更适合于初学者入门的语音3多种多样的开发工具的支持(JDK,BorlandJbuildecIntelliJIDEA,SunOneStudio,CodeWarrior)4不依赖丁•持定的软硯件平台一跨平台的开发工具classSaluton{一个简单的java程序publicstaticvoidmain(String[]arguments){Stringgreetings"Salutonmondo!";System.out.println(greeting);}}箍出结果:Salutonmondo!class的巫耍性在于Java^g序也称作类class后面程序的名字也必须是Java源程序文件的名字,并且大小写要完全相同,否则就会編译出错。main语句色味着程序从这里开始,也就是说,这里是Java程序的入口。applet是运行在因特网web页而中的程序.它不是以main为入口点的.Java的編辑:我们采用Java2SDK(softdevelopkit)1.5作为开发工具,该工具提供了编译程序和解释禅序,但未提供编辑工具。我们可以采用任何文木编辑工具來进行Java程序的编写,比如:记事本、写字板>word.EditPlus等等。源文件的扩展名为伽a;建议采取共有智能化功能的EditPlus作为编辑工具.Java的編译和执行:我们釆用Java2SDK(softdevelopkit)1.5作为开发工具,该工具提供了编译程序和解释程怡但未提供编辑工具。我们可以采用任何文木编辑工具来进行Jam程用的编写.比如:记圳本、写字板、word.EditPlus等等。源文件的扩展名为伽a;建议采取共有智能化功能的EditPlus作为编辑工具.Java参数的传递:publicstaticvoidmain(String[)arguments)中的arguments是个字符串数组,它川来接收程序运行时传递给程序的参数~参数和应川程序名及参数Z间要用空格隔开,如果参数中包含空格,那么必须川双引号把参数扌舌起來。例如:javaapplreadme.txt/p"pagetitle"包含了3个参数:readme.txt,/p,pagetitle参数个数没有限制,但是在应用程序中你需要写很名语句來处理这些参数:Applet基础知识:applet是运行在wwwweb页面屮的java程庁.运行在客户端计算机上。要让浏览器支持applet的运行,必须安装java的插件javaplug-in.与应用程序不同,applet不需要main()块,但有两个重耍的部分:init()块和paint()块。前者川于检査applet运行后首先要设巴的内容,后者川于显示内容。编译后的applet不能川java解释藩來执行.必须把它放到•-•个页而上。■Applet参数传递:不能从命令行运行applet.所以不能把给应用程序指定参数的方式用于applet・■applet通过运行它的html页面来传递参数,这个标记就足特姝的html标签vparam>・Java变绘的命名:变量名以字母.下划线(」、美元符号($)作为首字母•H余部分可以是任懸的字母或数字.但是不能用空格。介法的命名:allMylovez^gotosleep.Scheck非法的命名:all-MylovezallMylove变量命名在一定程度上要能描述变量的冃的,第•个字母应该小写.如果变量名的单诃冬于一个,则后续的每个单測的第一个字母大写。例如:intallTimeHighScore数类关键字占用位数缺省数值取值范围布尔boolean8falsetrue,false字节型byte80・128-127字符char16、u000(T'\uOOO(r・'\uFFFF短整short160・32768-32767整int320很大范也长整long640很大范围浮点型float320.0F很大范围双度型double640.0D很大范围Java名称全部人写而U值保持不变。intTOUCHDOWN=7;intFIELDGOAL=3;常虽经常用作类的屈性名。例:Font.BOLDFont.lTALIC字符串的连接:使用+连接为个字符出•也可以把字符串和变屋连接在一起。字符巾不绘标准Jam数据类塑.而是一个类.冈而首字母要大写:String.比较两个字符申是否和等调用String类的成员顷数equals.String类的length()方法用于确定串的长度©把一个字符宙改为大写:String类的toUpperCase()方法。把一个字符宙改为小写:String类的toLowerCase()方法。比如:两个方法都不改变所调用的字符巾变盛本身的大小写。\n査找字符串:判断一个字符串是否包含在另一个字符串里面。当你想在-•个非常大的字符串中查找一个折定的文本时.这种功能非常有用。在一个字符串中査找的方法是indexof(),把要杳找的字符串放在括号中.如果没找到指定字符串,index。")返回・1;如果找到,返回的值表示字符串出现的首位胃。字符串中字符的位逬从0开始计算。lndexof()方法是大小写敏感的,也就是说它搜索大小写完全匹配的字符串。例如:Stringscript=z/Youareacleverboy,r;intpos=script.indexOfC/are//)则:po$=4顺序结构分支结构循环结构与C卄的程庁结构相同,农示方法也基木相同•请参照C”的程序结构利农示方法Java数组:数组的说明方式:String!]naughtyChild;以上语句仅仅足定义了一个数组.但没有给它分配任何内存空间。数组的创建:l.lnt[]elf=newint[250];以上语句为数组分配了空间,但没有初始化毎个九素。这种情况下•数字型数组的初始值为0・字符型初始值为、0:布尔型初始值为false,字符串和其他对象类型初始值为null.2.String!]name={"dashTdancer"/vixen"};数组的下标和C*一样,都是从0开始,毎个数组都有一个屈性:length,它用来表示数组的大小(长度)。例如:int[]arc=newint[10];经常在循环语句中使用:for(l=0;l5)current。;try{Thread.sleep(lOOOO);}catch(lnterruptExceptione){}}}Thread.sleep(int)方法用于让线程睡眠一段时间。停I上一个线程:publicvoidstop(){if(runner!=null)runner=null;}文件:文件用File类表示,它利流类一样,都属于java.iotLo一个File对彖农示已经存在或即将创理的文件。要创建-个File对仪.用文件名作为构造函数的参数.例如:FilebookName-newFilet^address.dat^);FilebookName=newFile(r'data\address.daC);文件对象的方法:exist():如果文件存在,返回true,否则返回false.getName():String类型的文件名字。length():long型的文件大小°createNewFile():如果文件不存在,创建」个同名文件°delete。:如果文件存在,就删除文件。renameTo(File):使用参数描定的文件对除作为文件名來改•-•个文件的名从一个流中读数据:通过文件名或者File对象作为参数调用FilelnputStream()构造函数來创建一个文件输入流。创建文件输入流Z前此文件必须存在,如果不存在,就会产生lOException异常“例如:try{Filecookie=newFile("cookie.web");FilelnputStreaminput=newFilelnputStream(coolde);}catch(IOExceptione){•….}往一个流中写数据;输出流类:FileOutputStream如果把字节附加到现有文件的最后,用两个参数调用FileOutputStream()^i£函数.一个是代表文件的File对皱,另一个是true;如果想把字节写到新文件中,就只用第一个参数即可。一旦有了输出流,就可以调用不同的write()方法写字节:1.只用一个字节作为参数调用该方法,把北字节写到流中。2.用一个字节数组作为参数调用该方法.把数组所有字节写入•3.对该方法指定三个参数:一个字节数组,一个表示要写到流中的数组中第一个元素的整数,要写的字节总数。写入完成后,要用close()方法关闭流。基于连接的流式套接字;套接字是TCP/IP协议的编程接口,即利用Socket提供的-•组API就可以编程实现TCP/IP协议,在java语言里,这个编程接口就是若干系统预定义好的类。InetAddress主要用来区分计笄机网络中的不同节点.即不同的计兑机并对其寻址。毎个InetAddress对氯中包含了IP地址,主机名等信息•Socket通信机制流式socket所完成的通信足一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条&川的艰拟连接通道(處电路〉,然后它们通过这条通道传送数据佶息进行通信,为通信结束时再将原先所建立的连接拆除。Sen/er.??£;Ji2ServerSocket対勺./!山:1:2显听原%I:沛:••灯Iclient.%•:加伸“・」今术•出氏卜:弓沁kel._儿'」丄仏.戟址•?:*”dlent;£z;I•…=XHj-'j•必勺妙;socket拆除连按IKf此后server程序只要向这个socket対隸读写数抵.就可以实现向远端的client读写数据。需耍结束监听时,只需用如下语句关闭ServerSocket对象:MyListener.close():一、网络编程(chapterOl〜chapter14)部分:这部分复习范I围为每章课后选择题+以下复习范I围:ChapterOl:1、知识点:TCP/IP模型各层的协议;便用IP协议发送数据包的过程:TCP端口号范|制及每\n个范围端口号的用途:客门/服务器通信模式示童图;三种Socket2、例程:1-2s1-3构造socket:在c/s通信模式中.客户端发超与服务器端连接的诸求厉.Fl身需要先创建与服务浮连接的应用层FTP、TELNET.HTTPSNMP.DNSSocket・它通过操f系统为客戸进程分处的端I】來与服务器通信:而展务益进程如果接收了客户的连接诸求,匕么它也会创建与冬户通信的Socketo闵此,Socket足客户与服务器通信传输层网络互联层UPD的桥梁。创建Socket时.通1»Suckel丈其构适闻数的参数来反映与服务君连接的情形。有以卜•儿种构造甫数:2、Socket(InetAdcessaddress,intport)throwsUnknownHo$tException»lOException2.1inotAri*ssaddress^intport,InetAddresslocalAddr,intlocalPort)throwslOException主机一网络层以太网:IEEE80234、Socket(StringF)st,intport)throwsUnknownHostException,lOException5、Socket(StringF)st>intport.InetAddresslocalAddr,intlocalPort)throwslOException(tcp/ip模型各层协议)发送数据包的过程<1)同网络内部主机数抵包的发送令牌环网:IEEE802.4InetAddress类衣爪p地址•它本身的静态类方法可以rt接用來创理本身的対象.获IP地址:InetAddressIP1=InetAddress.getLocalHost();2、根据具体IP值获取IP地址:IP协议规定IP网络上的主机只能斤接向本地网上的其他主机发送数据包。而发送的真正InetAddressIP2—InetAddress.getByName("IP");ARP协议来获得对方物理地址。<2)不同网络上的主机发送数据包3、根据域名获取IP地址:地址是物理地址.任何网卡都具有唯-•的物理地址。主机A向主机B发送数据包时.会通过InetAddressIP3—InetAddress.getByName(”域名“)默认情况下,我们不需耍指定Socket类构造曲数中的客户进程IP地址和端I」,因为这两种当主机A向另-•网络上的主机B发送包时,主机A利用ARP协议找到本地网络上路山器佶息均由操作系统白动分配。但如来客户主机处于不止一个网络的情况下,它就只有务个IP的物理地址,把包转发给它•路由器按照如下办法处理数据包:地址,这时,如果客户进程与远程服务器连接时,就必须明确声明口己的IP地址,使得远程服务器能够知道客户所处的具体网络。a.如果数据包生命周期到,则抛弃数据包•b、搜索路山表,优先搜索路山表中的主机,如果能找到具有I」标IP地址的主机,则把数据包发送给该主机。当客八进程连接服务器时,如果岀现问题,则会抛岀各种界常。c>如果匹配主机失败,则继续搜索路由农,匹配同网络的路由藩.如果找到【兀配的路由1、UnknownHostException:无法识别服务器的名字或IP器.则将数拥包转发给该路由器。异常。2、ConnectException:flli务器进程没有监听指定能口,或者服务器拒绝客户连接,则抛出该d•如果匹配同子网的路由器失败,则继续搜索路由表.匹妃同网络的路由器,如果找到匹配的路由黯•则将数据包转发给该路由髀.3、SocketTimeoutException:零待连接超时e>如果以上匹配操作都失败•就搜索默认路由,如果默认路由存在,则按照默认路由发送4、BindException:如果Socket无法与指定的本地IP或端口绑定,则抛出该异常。数据包,否则丢弃数据包。以上异常均为lOException的宣接或间接子类。<1)在Client/Server模式中.同一个服务器进程耍与多个客户进程建立连接.在客户端.每个TCP连接都分配一个端口号•(2)瑞口号范I制为0—65535。其中0—1023周定分配给应用层的服务。1024-65535供用户白定义的服务使用。而客户端进程的端口号由所在主机的操作系统动态分配和释放。(3)TCP和UDP端口在同一个主机中的取值范屈是各口独立的。允许存在取值相同的TCP端口和UDP瑞口。c/s通信模式:〈1)使用TCP/IP协议进行通倍的两个进程分别称为客户和服务器。客户向服务器提出请求,而服务器响应客户请求。一般,服务器能同时为影个客户服务。(2)传输层向应用层提供了Socket接口,毎一个socket都对应一个端口,它时装了底层的数拥传输细节.应用层进程间的通信都是通过socket进行.如图::Ufc-1|卜Td""'翼*|■ouX.t;|在Java中,有三种Socket*java.net.Socket,java.net.ServerSocket和java.net.DatagramSocket.前两者足建立在TCP协议基础上,Datagramsocket是建立在UDP协议基础上。Chapter02:1.知识点:socket的构造函数:InetAddress类的静态方法:Socket构造方法抛出的四种异常及拋出时机:获取Socket信息的函数:半关闭Socket的方法:Socket选项的定义:TCP_NODELAY・SO.RESUSEADDR.SO.TIMEOUT,SOJJNGER选项的用途和设宙/读取方法2、例程:2・6、2-7>2-8>2-9获取Socket信息:Socket是客户与駁务器双方通倍的桥梁。因此.几乎所有的通信侶息都包含比Sockel中.通过Socket,我们可以获得通倍双方的地址、端口.爾入输出流、通倍数据等。这些伯息的获得都依gSocket类的方法。Socket类主要包拯以下获取信息的方法:lxgetlnetAddress():获取远程服务器IP2、getPort():获得远程服务器端口3、getLocalAddress():获得客户IP地址4、getLocalPort():获得客户本地端口5、getlnputStream():获得输入流6、g/?utputSiream(人孑艾得输出流关闭与半关僻SC隸毋叫客户和服务器在进行通倍的过程中,都分别要占用各种资源,比如内存缓冲区,信道带宽,端口等。在通信结束Z后,就应该释放这些被占用的资源,以便其他进程能够重新利用这些共享资源。Socket的close()方法用于关闭Socket,当关闭了Socket之后,双方就不能再利用输入输出流进行数据交换了。为了使close()方法始终得到执行.应该将其放入finally代码块中。当调用socket的close(〉方法关闭socketZ后,它的输入输出流同时被关闭掉.这样就不能再进行任何方向的数据传输。如果不希望輸入输出流擁关闭•那么可以选择关闭其中之一,\n称之为半关闭socket,有以下方法:1%shutdowninput()关闭输入流2、shutdownoutput()关闭輸出流注:调用shutdownlnput(shutdownOutput()方法,仅仅关闭输入流和输出流•并不等于Tclose()方法,这就是说,占用的资源没有禅放。因此,在通侑结束后,仍然需要调用close()方法来释放资源.所谓Socket的开关(或称选项),本质上足Socket类的•属性(或称成员变城儿每」个属性都对应右一对get/set方法,这对方法用于获取或者设胃丽性的仪。这些屈性的讹值将宜接澎响socket的通信过程和对数据的处理方式及效率。lxTCP.NODELAY选项:该选项决定socket是否采用发送数期缓冲区。默认情况下.socket发送数据采用缓冲区•比较适合大批蔽的数据发送,但是影咆收发双方交互的速度.如果用户程序对于实时性耍求牧高的话,就应该将该选项设買为true,这样,socket就会关闭发送数据缓冲区,从而提高响应速度。2、SO_RESUSEADDR选项该朋性是指在关闭socket在没有立即释放所占川端口的悄况下.是否允许其他进程立刻朮用相同的端口•值得注总的足:<1)将该选项设置.为真的方法必须在socket还没有绑定到任何本地瑞口之就调用。(2)两个共川同一端I】的进程都必须谶用将选项设逬为真的方法,才能在一个进穆关闭socket后,另一个进程的socket能够立刻亜用相同端口。3、SO.TIMEOUT选项该选项决定了如果socket的輸入流中没冇数据或者是没有足够的数据时,进程需耍等待的时间,超过设定时间会抛岀超时异常。默认情况下,进程会无限等待.水远不超时。但耍注意:<1)setTimeout方法必须在接收数拯之前执行才生效。<2)即使已经抛出超时异常.socket仍然是连接的.可以尝试再次读数据。4、SOJJNGER选项该选项的设冕决定socket关闭后,是否立即关闭底层的Socket,以及close方法是否立即返回。<1)默认悄况下,socket调用dose()方法会立即返回,但底层socket不会立即关闭,而是直到发送完剩余数拥.才真正关闭sockets〈2)如果执行:socket.setSolinger(truefO)・则close方法也立即返回,但底层socket也立即关闭.未发送完的数据被丢弃。(3)如果执行:socket.setSoLinger(truez3600)•则close方法不会立刻返回,而是进入阻塞状态。这时.底层socket会发送剩余数据.宜到所有剩余数据发送完,或者是虽然未发送完.但已经阻塞超过3600秒,dosg方法才会返回。阻塞超过设定时何.剰余未发送完的数据会被丢弃.Chapter03:1>知识点:ServerSocket构造函数:ServerSocket获取IP及端口的方法:ServerSocket的SO.TIMEOUT选项、SO.REUSEADDR选项、SO.RCVBUF选项的川途:实现幺线程服务器的3种方JavaAPI捉供的线程池「使用线程池的问题2、例程:3・2、3-9ServerSocket类的构造方法如下:1、ServerSocket()throwslOException2、ServerSocket(intport)throwslOException3、ServerSocket(intport・intbacklog)throwslOException4sServerSocket(intportjntbacklogJnetAddressbindAddr)throwslOExceptionImpublicInetAddressgetlnetAddress()2、publicintgetLocalPort()其中,第2个方法还可以获得匿名端口号。ServerSocket有三个选项:KSO.TIMEOUT:农示等待客户连接的趙时时间2、SO_REUSEADDR:农示是否允许审用服务器所绑定的地址。3、SO.RCVBUF:表示接收数据的缓冲区大小•SO.TIMEOUT选项是在ServerSocket执疔accept()方法时等待客户连接的超时时间。如果该值汝世为0,则永远不会超时。但如果执行该方法时没有任何的兴户连接请求,则服务器进程进入阻塞状态,宜到有客户连接请求出现为止。该选项的设盘必须在accept方法执行之前进行.否则就失去了作用。SO_REUSEADDR选项:该选项作用与Socket的SO_REUSEADDR选项作用相同,是决定在ServerSocket关闭之后,是否允许其他服务器进程立即绑定到相同端口。如果允许,则选项值必须设为true.同时必须在ServerSocket没有绑定到任何端口之前设氏SO_RCVBUF:设買服务器端接收数据的缓冲区大小,其默认值和操作系统有关。ServerSocket执行设置该选项的探作,相当于对所有accept方法返回的socket设逍数据缓冲区大小实现名线程服务器的3种方法:1、为毎个客户连接分配一个工作线視2、自定义一个线程池,使用池中的工作线程來处理客户请求3、使用Java类库中现有的线程池,由其中的工作线程来为客户诜求服务创建线程池线程池为线程生命周期开销问题和内存资源不足问题提供了解决方案。线程池中预先创建--些线程,他们不断从工作队列中取出任务,然后不断执行任务。使用JavaAPI提供的标准线程池(导入java.util.concurrent包)使用线程池的问题:K死锁2、系统资源涓耗过度3、并发不同步4、线程液鴛5、任务过我Chapter04:1、知识点:导致线程阻塞的原因;多线程处理阻塞通信的局限:非阻基通信的原理:支持非阻塞通侑的主要类及其用途、这几个类的几个主要方法:SelectionKey的静态常址:缓冲区的三个属性及含义:緩冲区三个重要方法:clear,flip,rewind的含义:图4J32、例程:4-2x4-5务线程处理讥塞通信的局很:K毎个线程占有独立的栈内存,韵若工作线程数啟的増加,系统开销増大,便得线程之间的调度变得负担加龜,増加了线穆间同步的复杂性,死锁可能性也加大。2.由于阴塞I/O的大址存在,CPU的使用权在线程间频繁转上这样,系统的时间大绘浪费在无谓的探作上,大大降低了系统性能。非臥塞通借的原理;服务器程序采用单线程,处理流程采用轮询工作方式,不等待任何操作就绪,这也就是菲阻塞通信。While(-宜等待.宜到有接收连接就绪爭件.读就绪事件或写就绪爭件发生){if(有客户连接)接收客户的连接:if(输入流中有可读数据)从输入流中读数拥;if(输出流可以写数据)向输出流写数据;\n除了条件中的操作是阻塞方式工作.其他操作都是非阻塞的。位于javax.swing包中。该类对展示HTML文档提供了强大的支持•能協处理HTML标记、农单及趙级链接。该类的构造函数:SolectotoloCKantioIpublicJEditorPane()SolectlonKoy2、publicJEditorPane(URLinitialPage)SocketCliannelServerSocketChanneI:ServerSocket的替代类,支持阻塞和非阻塞通信。•Socketchannel:Socket的替代类.支持阻塞和非阻塞通信。•Selector:为ServerSocketChannel监控接收连接就绪爭件,为Socketchannel监控连接就绪、读就绪和写就绪事件。•SelectionKey:代表注册事件的句柄•用于跟踪在Selector中注册的事件。ServerSocketChannel和Socketchannel都是SelectableChannel的子类.并最终实现Tchannel接口。SelectionKey类该类用来跟踪ServerSocketChannel或Socketchannel向Selector注册的事件的句柄©当事件发生时,Selector就会把相应的SelectionKey对象加入到Selected-keys集合。在SelectionKey中定义了4种事件:(1)SelectionKey.OP.ACCEPT:接收连接就绪事件(2)SelectionKey.OP.CONNECT:连接就绪事件(3)SelectionKey.OP_READ:读就绪事件<4)SelectionKey.OP.WRITE:写就绪事件该类的主要方法:<1)publicSelectableChannelchannel()返回与该SelectionKey对象关联的SelectableChannel对象<2)publicSelectorselector()返回与这个SelectionKey对象关联的Selector对象<3)publicintinterestOps()返回这个SelectionKey感兴趣的事件<4)publicSelectionKeyinterestOps(intOps)为SelectionKeyW加感兴趣事件,返I可当询SelectionKey对纵门身。3、publicJEditorPane(Stringurl)4、publicJEditorPane(StringmimeType^Stringtext)JEditorPane类的设逻要展示的页面的方法:1、publicvoid$etPage(URLpage)2、publicvoidsetPage(Stringurl)3、publicvoidsetContentType(Stringtype)4、publicvoidsetText(Stringtext)利两个方法指定要展示的页面的URL.第3个方法指定文档类型.城后的方法指定文档具体内容对于JEditorPane展示的HTML文档,用户可以进行以下动作:(1)点击页面上的超级链接(2)提交表单数据这两种动作都会触发HyperlinkEvent该爭件illHyperlinkListener曲听接口负资处理。该接口中定义了处理HyperlinkEvent事件的方法:publicvoidhyperlinkUpdate(HyperlinkEventevt)该方法的参数是一个HyperlinkEvent类型的对欽,该参数有如下方法:(1)getURL():返回用户点击的超级链接的URL(2〉getEventType():返回爭件类型,可能有如下取值:•HyperlinkEvent.EventType.ACTIVATED:点击了超链接•HyperlinkEvent.EventType.ENTERED:^标进入超铤接区域•HyperlinkEvent.EventType.EXITED:?^标离开超链接区域Chapter08:K知识点:UDP与TCP协议的比佟Datagrampacket类川于接收数据和发送数据的构造方法及方法参数的含义:Datagramsocket类发送和接收数据的方法;MulticastSocket类与组播组通信的方法2、例程:8-1.8-2x8-8>8-9級限位匿Flip():把桜限设为位買.Rewind<):不改变极限,容:®缓冲区M以保存数IS的檢头雀协议是可琳的、稳定的数据传输协议’具有出错垂传、顺"•蔡理"数据校验的功能。桜限綴冲区的当的终点滾写蚩冀鄴毅捲n的可離传输,可能丢失数幣也不保证能够数剜安照顺"到达目的限*但展限可以修改地,同时也不对顺序混乱的数据包进行鉴理。位爲S經冲区下i陕写单元的位會S似簿[次谀弩金速度相对较低,建立和销毁客户耳眼务器的连接都要付出时间和緩冲区.郁金改交该值"但斌大础補樽橢®则具有枚快的传输速度.适合传输大容址、对准确性耍求不高的数据.統冲区Buffei■次提供了改变以上云卞晨魏|鬲險要求可靠传输,则如果使用UDp,则应用层必须保证传輸的数据Clear(),把馭限设为容:ft,再捋爲置设为。再理爆爵關幌信时,客户瑞socket必须先与展务器端建立连接.客户端的socket与服抓化鮒L是一对应的关系,构成两个端点何的虚电路。而UDP足无连接的协议,Chapter07:Is知识点:这部分冇很女知识点已经包含在课件2・3中,除此之外需當握:Java组件上展示客户端的Datagramsocket与服务藩端的Datagramsocket不存在对应关系,无需建立连接,就町以相互收发数抵。HTML文档的注意事项:JeditorPane类的构造函数:JeditorPane类设页面的方法:处理HyperlinkEvent事件的方法2、例程:7-2注意爭项5、对于每一个UDP数据报Datagramsocket•它都与一个本地IP地址和本地UDP端口相绑定。而UDP端口与TCP端「I相互独立。Datagrampacket的构造函数分为两类:一类构造方法创建的数据报用来接收数据,另一类构造方法创建的数据报用來发送数据。用來发送数据的构适方法需要给出F1的地址参数。Is慕于文本的大多数Swing组件都可以指定其文木为HTML文档。1.Swing组件所支持的HTML文档标记主要是静态文档的格式修饰标记以及图形标记。2.Swing组件不能解析标记屈性值当中的相対路径.只支持绝对路径。K用于接收数据的构造方法:publicDatagramPacketfbyte[]datajntlength)publicDatagramPacket(byte[]datajntoffset,intlength)data数组托丁•存放接收到得数据“\npublicDatagramPacket(byte[]data,intoffsetJntlengthJnetAddressaddressjntport)publicDatagramPacket(byte[]data)ntoffsetjntlength,SocketAddressaddress)publicDatagramPacket(byte[]datajntlengthJnetAddressaddressjntport)publicDatagramPacket(byte()datajntlength.SocketAddressaddress)DatagramSocket接收发送数据报的方法:1%publicvoidsend(DatagramPacketsrc)该方法不保证数据报一定到达接收发,没有收到也不会抛出异常。2、publicvoidreceive(DatagramPacketdst)接收一个数据报,如果没有数据报则接收线程会陷入阻塞状态。该类是DatagramSocket类的于类,也使用DatagramPacket存放组播数据报=■但在收发方面冇所不同.接收组播数拥報时.MulticastSocket必须先加入一个组播组.然厉它可以接收发送到该组的组播数据报;发送时.MulticastSocket无需加入到任何组播组。构造方法:PublicMulticastSocket()PublicMulticastSocket(intport)PublicMulticastSocket(SocketAddressbindAddress)与组播组通信:1、加入到组播组:joinGroup()方法2、向组中成员发送数据报:send()方法1.接收发送到组中的数据报:receive()方法2.离开组播组:leaveGroup<)方法Chapter09:1、知识点:实现对象序列化及反序列化的3种方式2、例程:9-1.9-2>949-10对于某个具体的类.按照它实现接口的类型不同以及是否車新定义序列化及反序列化方法.其对象的序列化及反序列化有不同的方式:(1)如果该类仅仅实现Serializable接口,则ObjectOutputStream类调用其writeObject(Objectobj)方法采用默认方式序列化该类对欽的IKtransient成员。Objectinputstream类调川其readobject()方法采川默认方式反序列化该类对象的非transient成员。<2)如果该类实现了Serializable接1丨・并且在类内定义了writeObject(ObjectOutputStreamout)方法及readObject(Objectinputstreamin)方法,则ObjectOutputStream类和Objectinputstream类会分别主动调川该类定义的这两个方法來序列化及反序列化该类的对竦。<3)如果该类实现了Externalizable接口.则该类必须实现该接口中定义的两个方法:writeExternal及readExternah对象输111流和对象输入流会分别调川这西个方法对该类的对象进行字列化及反字列化.ChapterlO:1.知识点:反射机制提供的主要功能;实现反射机制的主要类:实现反射的步朕:Class类的主要方法及用途:调川服务器端远程方法的过程:图20・22、例程:10-2.10-3作丿小在运行时动态获取对象所属的类、动态创建对象.动态获取类的成员和方法、调用动态获的方法、生成动态代理类.反射类由java.lang.reflect包中的相关类来实现。包括Class类.Field类、Method类等等。每个类都代表动态获取的类中的某一类信息。Java.lang.reflectU中的主要反射类…般都足配合在一起使用的。通常都足按照如下步猱使用反射类:1.先根据具体的某个对象,通过英从Object类继承下來的getClass方法获得对象所屈的类的倍息,把该信息保存在Class对众中。2、通过Class对彖的方法动态获取具体刘彖的属性.方法.构造函数等信息。3、通过步骤2所获得的具体对象的方法保存到Method対線中•然厉通过Method类的invoke方法动态调用原具体对象的方法,或者构造一个新对象“调用服务器端远程方法的过程:在C/S结构的通侑程字中,-般客户和服务器双方都会收发对方的数据或者是序列化反序列化数据,但彼此不会远程调用対方对徐的方法,也无法调用,因为客户进程和服务器进程分别处于不同的机器上,并不处于同一内存区。在这种情况下,號只能借助一个中间通信对象.在客户端将该对象序列化到服务器端,被序列化的中间对象包含了被调用的服务器端的对象所屈的类、方法及参数等侑息:而服务端反序列化该中间对象后.根据里面的信息,运用反射机制,调川本地对盘的方法,将方法执行结来也放入中间对彖,然后序列化到客户瑞,这样客户端就得到了执行结果。Chapterll:1.知识点:RMI的基本原理:图114创建RMI应用的步骤2、例程:11-1.11-2>11・3、11-4基木原理:RMI框架解决的是在C/S通侑模式下,客户端如何调用服务器端的远程对铁的方法的问题。RMlM架封装了双方通过socket通信的细节.并自动为服务器端的远程対線生成客户端代理(存根〉和服务器端代理(骨架〉,山存根对要调用的远程对象的方法和参数进行序列化及对返回结果反序列化,由骨架对这些倍息反序列化以及对执行结果序列化。创建RMI应用的步5轧1、创建远程接口‘该接口必须继承Remote接口2、创建实现上述接口的远程类,并且该类的对彖必须能够导出为远程对彖.3、创建服务器程序.该程序负贵创建远程对象并将远程对象注册到rmiregistry注册表中。4、创建客户程序.该程序杳找rmiregistry注册农•得到远程对象的存根,并通过存根调用远程对象的方法。Chapterl4:1、知识点:图14-3;JavaMailAPI主要类的用途:建立JavaMail应川需要的坏境:创建JavaMail应用程庁的步骤2、例II:14-1