资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言程序设计 Java 网络编程 网络协议 url编程 socket编程 网络环境中的java java语言是Internet上的世界语。 3 借助HTML从网上下载applet 在程序中通过URL访问网上资源 通过包中的类 直接在程序中实现网络通讯 网络协议 4 应用层:使用URL、 URLConnection 类 传输层:使用Socket、 ServerSocket 类 Application (HTTP, FTP, telnet) Transport (TCP, UDP,.) Network (IP) Link (device driver) Physics 一般应用程序是靠TCP(而 不是IP)实现通讯功能,因 为它们需要大量数据的无差 错传输。 URL 统一资源定位符URL(Uniform Resource Locator) 用字符串表示Internet网络上资源的地址 包括两部分 使用的协议(http, ftp, gopher, file) 资源位置 资源位置 主机名,即域名,如,也可使用IP地址 5 URL 端口号,为访问资源时应连接的服务器的地址,当地址 为缺省的WWW服务端口80时,可省略不写 路径名,资源文件在机器中的路径,一般为文件路径, 但也可以是执行CGI程序的命令 引用,指向资源文件的某一个位置 :8888/dir/file.htm#loc 6 URL URL Uniform Resource Locator 指向 World Wide Web 上的一个资源。 :8888/dir/file.htm#loc 协议名( http、 ftp、 file等) 资源位置(主机域名,也可用IP地址) 端口号(服务器监听程序的端口。WWW服务端口 隐含值为80,FTP 21 ,Telnet 23) 路径名(文件在机器中的路径名。资源文件或CGI 程序等) 引用(# 指向资源文件的某一个位置) 7 URL类 .URL 创建URL对象代表一个URL资源 构造函数 URL(String spec) URL url1=new URL(“ URL(URL baseURL, String relativeURL) URL url2=new URL(url1, “file.html”); 如: try URL url1 = new URL( :100/ ) URL url2 = new URL(url1, “index.html”); catch MalformedURLException 8 URL类 URL(String protocol, String host, int port, String file) URL(String protocol, String host, String file)使用缺省80端口 构造函数抛出MalformedURLException 获取URL信息的一些方法 getProtocol(), getHost(), getPort(), getFile(), getRef() 例:ParseURL.java 9 URL类方法 方法1 取出URL的指定成分信息 url1.getProtocol() url1.getHost() url1.getPort() url1.getFile() 方法2 InputStream url1.openStream() 10 1 利用URL获取网络资源 创建URL对象 使用URL对象的openStream()方法,返回一个 InputStream。 从此InputStream读入即可。 例:URLReader.java 11 URLConnection类 一个URLConnection对象代表一个Java程序与URL资源的通 讯连接。通过它可对这个URL资源读或写。 通过openConnection方法,获得URLConnection类对象 URLConnection url1. openConnection() 成功,返回一个URLConnection对象 不成功,抛出IOException例外 URLConnection类的读写渠道 getInputStream() getOutputStream() 12 URL 资源 2 URLConnection 从URLConnection读 getInputStream() 例:URLConnectionReader.java 向URLConnection写 什么情况下有必要向URL写信息呢? 表单(Form)与CGI有交互的网页 使用POST方式向CGI传送信息 setDoOutput(true), getOutputStream( ) 例:Reverse.java 13 CGI程序 POST信息 有动态特性的 HTML网页 标准输入 标准输出 InetAddress类 表示一个IP地址 类方法: static InetAddress getByName(String) static InetAddress getLocalHost() 用于创建IP地址实例: InetAddress ip1=InetAddress.getLocalHost(); InetAddress ip2= InetAddress.getByName(166.111.7.250); InetAddress ip3= InetAddress.getByName(); 14 3 InetAddress类 其他方法 String getHostAddress(): 返回“%d.%d.%d.%d”形式的IP地址 String getHostName(): 返回主机名 String toString() 如: ip1.getHostName() ip1.getHostAddress() 例:MyIPAddress.java 15 传输层协议TCP与UDP TCP(Transport Control Protocol) 两主机之间有连接的、可靠的、端对端(end-to-end)的数 据流的传输 如http, ftp, telnet 的传输层均使用此协议 UDP(User Datagram Protocol) 从一台机器向另一台机器以无连接的、数据报的方式进 行通讯的协议 如:email可以使用UDP 16 主机与端口 如何确定通讯的目标,两部分: 主机 使用IP地址或域名 端口,用于区分同一台主机上的不同的进行通讯的应用 进程 端口 01023系统使用 102465535 用户使用,最好8000以上 17 Socket通信 端到端的连接与通信 网络上的两个程序(进程)通过一个双向的通信连接实现 数据的交换。 双向链路的一端称为一个socket(套接字) 主机端口(用于区分同一台主机上的不同的通信应用进 程:01023系统 102465535用户) 18 TCP与Socket 有连接的服务中,服务器进程端口绑定一个Socket, 监听客户请求 请求 服务进程 响应请求 服务进程与客户进程各绑定一个Socket,进行相互 通讯。 19 UDP与Datagrams 使用UDP协议传送数据时,把数据分割为各自独立的多个数 据报(Datagrams), 分别发送,数据报是否到达、到达顺序以 及内容是否正确不保证。 IP以及端口地址包含在报头中 20 使用Socket编程 使用socket在Client程序和Server程序间建立连接、 通讯的通道 对于任一端来说与对方的通信会话就是 打开socket(建立连接) 从 socket 中读数据 / 向 socket 中写数据 关闭 socket(拆除连接) 21 Socket 编程步骤 创建socket 打开连接到socket的输入/输出流。 按照一定的协议对socket进行读写操作,实现所要 完成的主要工作。 关闭socket 22 Socket类 构造函数: Socket(InetAddress addr , int port) Socket(String addr , int port) 因是TCP支持类,所以需要端口号。 使用该类扮演客户机的角色。 TCP连接会涉及客户机/服务器双方端口号。但客户机端口由 TCP/IP软件自动分配。 方法: InputStream getInputStream(); outputStream getoutputStream(); 23 使用Socket编程 24 Server端通讯过程 Client端通讯过程 在某端口创建 ServerSocket 对象提供监听 等待并接收 Client端 的请求 利用返回的 Socket对象与 Client端通讯 关闭Socket 结束与此 Client的通讯 关闭 监听 创建Socket 对象向Server 某端口请求 利用此Socket 对象与Server 端通讯 关闭Socket 结束与此 Server的通讯 建立 连接 数据 通讯 拆除 连接 socket通信 25 Client /试图连接 Socket(host;port#) OutputStream InpotStream Socket.close() Server /占用某个端口 ServerSocket(hostport) /等待连接 ServerSocket.accept() Socket() OutputStream InpotStream Socket.close() Socket与I/O流 一个socket可以持有两个流输入流与输出流 26 Client端 用Server端主机号,端口号创建Socket对象 Socket mClient = new Socket(166.111.3.3,8010); 利用Socket实现网络 I/O InputStream rDIn=mClient.getInputStream(); OutputStream rD=mClient.getOutputStream(); DataInput Din=new DataInputStream(rDIn); DataOutput Dout=new DataOutputStream(rD); 关闭Socket,结束通讯 mClient.close(); 27 c/s例 client 端 import java.io.” import .* public class c pbulic static void main(String args) try Socket socket = new Socket(“127.0.0.1”,8888); BufferedReader sin = new BufferedReader ( new InputStreamReader( socket.getInputStream(); PrintWriter sout = new PrintWriter ( socket.getOutputStream() ); BufferedReader input = new BufferedReader ( new InputStreamReader( System.in) ); 28 c/s例 client 端 String ask =input.readln(); while (!ask.equals(“end”) sout.println(ask); sout.flush(); System.out.println(“server answer: ” + sin.readline() ); ask =input.read
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号