第10讲_网络编程_175106601

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java语言程序设计Java网络编程网络协议url编程socket编程JAVA语言程序设计清华大学刘宝林3网络环境中的javajava语言是Internet上的世界语。借助HTML从网上下载applet在程序中通过URL访问网上资源通过java.net包中的类直接在程序中实现网络通讯JAVA语言程序设计清华大学刘宝林4网络协议应用层:使用URL、URLConnection类传输层:使用Socket、ServerSocket类Application(HTTP,FTP,telnet)Transport(TCP,UDP,..)Network(IP…)Link(devicedriver)Physics一般应用程序是靠TCP(而不是IP)实现通讯功能,因为它们需要大量数据的无差错传输。JAVA语言程序设计清华大学刘宝林5URL统一资源定位符URL(UniformResourceLocator)–用字符串表示Internet网络上资源的地址–包括两部分使用的协议(http,ftp,gopher,file…)资源位置资源位置–主机名,即域名,如,也可使用IP地址JAVA语言程序设计清华大学刘宝林6URL–端口号,为访问资源时应连接的服务器的地址,当地址为缺省的时,可省略不写–路径名,资源文件在机器中的路径,一般为文件路径,但也可以是执行CGI程序的命令–引用,指向资源文件的某一个位置语言程序设计清华大学刘宝林7URLURL—UniformResourceLocator指向WorldWideWeb上的一个资源。协议名(http、ftp、file等)资源位置(主机域名,也可用IP地址)端口号(服务器监听程序的端口。,FTP21,Telnet23)路径名(文件在机器中的路径名。资源文件或CGI程序等)引用(#指向资源文件的某一个位置)JAVA语言程序设计清华大学刘宝林8URL类java.net.URL–创建URL对象代表一个URL资源构造函数–URL(Stringspec)URLurl1=newURL(“”);–URL(URLbaseURL,StringrelativeURL)URLurl2=newURL(url1,“file.html”);如:try{URLurl1=newURL()URLurl2=newURL(url1,“index.html”);}catchMalformedURLExceptionJAVA语言程序设计清华大学刘宝林9URL类–URL(Stringprotocol,Stringhost,intport,Stringfile)–URL(Stringprotocol,Stringhost,Stringfile)使用缺省80端口–构造函数抛出MalformedURLException获取URL信息的一些方法–getProtocol(),getHost(),getPort(),getFile(),getRef()–例:ParseURL.javaJAVA语言程序设计清华大学刘宝林10URL类方法方法1取出URL的指定成分信息url1.getProtocol()url1.getHost()url1.getPort()url1.getFile()方法2InputStreamurl1.openStream()1JAVA语言程序设计清华大学刘宝林11利用URL获取网络资源创建URL对象使用URL对象的openStream()方法,返回一个InputStream。从此InputStream读入即可。例:URLReader.javaJAVA语言程序设计清华大学刘宝林12URLConnection类一个URLConnection对象代表一个Java程序与URL资源的通讯连接。通过它可对这个URL资源读或写。通过openConnection方法,获得URLConnection类对象URLConnectionurl1.openConnection()–成功,返回一个URLConnection对象–不成功,抛出IOException例外URLConnection类的读写渠道getInputStream()getOutputStream()URL资源2JAVA语言程序设计清华大学刘宝林13URLConnection从URLConnection读–getInputStream()例:URLConnectionReader.java向URLConnection写–什么情况下有必要向URL写信息呢?–表单(Form)与CGI-有交互的网页–使用POST方式向CGI传送信息–setDoOutput(true),getOutputStream()例:Reverse.javaCGI程序POST信息有动态特性的HTML网页标准输入标准输出JAVA语言程序设计清华大学刘宝林14InetAddress类表示一个IP地址类方法:–staticInetAddressgetByName(String)–staticInetAddressgetLocalHost()用于创建IP地址实例:InetAddressip1=InetAddress.getLocalHost();InetAddressip2=InetAddress.getByName(166.111.7.250);InetAddressip3=InetAddress.getByName();3JAVA语言程序设计清华大学刘宝林15InetAddress类其他方法–StringgetHostAddress():返回“%d.%d.%d.%d”形式的IP地址–StringgetHostName():返回主机名–StringtoString()如:ip1.getHostName()ip1.getHostAddress()例:MyIPAddress.javaJAVA语言程序设计清华大学刘宝林16传输层协议TCP与UDPTCP(TransportControlProtocol)–两主机之间有连接的、可靠的、端对端(end-to-end)的数据流的传输–如http,ftp,telnet的传输层均使用此协议UDP(UserDatagramProtocol)–从一台机器向另一台机器以无连接的、数据报的方式进行通讯的协议–如:email可以使用UDPJAVA语言程序设计清华大学刘宝林17主机与端口如何确定通讯的目标,两部分:–主机使用IP地址或域名–端口,用于区分同一台主机上的不同的进行通讯的应用进程端口–0~1023系统使用–1024~65535用户使用,最好8000以上JAVA语言程序设计清华大学刘宝林18Socket通信端到端的连接与通信网络上的两个程序(进程)通过一个双向的通信连接实现数据的交换。双向链路的一端称为一个socket(套接字)主机—端口(用于区分同一台主机上的不同的通信应用进程:0~1023系统1024~65535用户)JAVA语言程序设计清华大学刘宝林19TCP与Socket有连接的服务中,服务器进程端口绑定一个Socket,监听客户请求请求服务进程响应请求服务进程与客户进程各绑定一个Socket,进行相互通讯。JAVA语言程序设计清华大学刘宝林20UDP与Datagrams使用UDP协议传送数据时,把数据分割为各自独立的多个数据报(Datagrams),分别发送,数据报是否到达、到达顺序以及内容是否正确不保证。IP以及端口地址包含在报头中JAVA语言程序设计清华大学刘宝林21使用Socket编程使用socket在Client程序和Server程序间建立连接、通讯的通道对于任一端来说与对方的通信会话就是–打开socket(建立连接)–从socket中读数据/向socket中写数据–关闭socket(拆除连接)JAVA语言程序设计清华大学刘宝林22Socket编程步骤创建socket打开连接到socket的输入/输出流。按照一定的协议对socket进行读写操作,实现所要完成的主要工作。关闭socketJAVA语言程序设计清华大学刘宝林23Socket类构造函数:Socket(InetAddressaddr,intport)Socket(Stringaddr,intport)–因是TCP支持类,所以需要端口号。–使用该类——扮演客户机的角色。–TCP连接会涉及客户机/服务器双方端口号。但客户机端口由TCP/IP软件自动分配。方法:InputStreamgetInputStream();outputStreamgetoutputStream();JAVA语言程序设计清华大学刘宝林24使用Socket编程Server端通讯过程Client端通讯过程在某端口创建ServerSocket对象提供监听等待并接收Client端的请求利用返回的Socket对象与Client端通讯关闭Socket结束与此Client的通讯关闭监听创建Socket对象向Server某端口请求利用此Socket对象与Server端通讯关闭Socket结束与此Server的通讯建立连接数据通讯拆除连接JAVA语言程序设计清华大学刘宝林25socket通信Client//试图连接Socket(host;port#)OutputStreamInpotStreamSocket.close()Server//占用某个端口ServerSocket(hostport)//等待连接ServerSocket.accept()Socket()OutputStreamInpotStreamSocket.close()JAVA语言程序设计清华大学刘宝林26Socket与I/O流一个socket可以持有两个流—输入流与输出流JAVA语言程序设计清华大学刘宝林27Client端用Server端主机号,端口号创建Socket对象SocketmClient=newSocket(166.111.3.3,8010);利用Socket实现网络I/OInputStreamrDIn=mClient.getInputStream();OutputStreamrD=mClient.getOutputStream();DataInputDin=newDataInputStream(rDIn);DataOutputDout=newDataOutputStream(rD);关闭Socket,结束通讯mClient.close();JAVA语言程序设计清华大学刘宝林28c/s例—client端importjava.io.”importjava.net.*publicclassc{pbulicstaticvoidmain(Stringargs[]){try{Socketsocket=newSocket(“127.0.0.1”,8888);BufferedReadersin=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWritersout=newPrintWriter(socket.getOutputStream());BufferedReaderinput=newBufferedReader(newInputStreamReader(System.in));JAVA语言程序设计清华大学刘宝林29c/s例—client端Stringask=input.readln();while(!ask.eq

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功