chapter14Java网络编程.ppt
Java网络编程n网络基础nInternet的形成和发展n网络通信协议n网络通信结构TCP/IPnSocketnJava Socket编程网络基础知识n网络:n把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模宏大、功能强大的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。n计算机的联网可以实现:n使用远程资源n共享信息、程序和数据n分布处理计算机网络分类n按照网络规模和范围可以简单划分为:n局域网(LAN,Local Area Network)n都市网(MAN,Metropolis Area Network)n广域网(WAN,Wide Area Network)n按照网络拓扑结构可以分为:n星型网络、总线网络、环线网络、树型网络、星型环线网络等n按照传输介质划分:n双绞线、同轴电缆、光导纤维、视线介质等网络的几种工作模式n专用服务器结构(Server-Based)又称为“工作站文件服务器”结构,由若干台微机工作站与一台或多台文件服务器通过通信线路连接起来组成工作站存取服务器文件,共享存储设备。n客户机/服务器模式(clientserver)其中一台或几台较大的计算机集中进行共享数据库的管理和存取,称为服务器,而将其它的应用处理工作分散到网络中其它微机上去做,构成分布式的处理系统。n对等式网络:(Peer-to-Peer)n在对等式网络结构中,没有专用服务器 每一个工作站既可以起客户机作用也可以起服务器作用。Internet基础nInternet的形成和发展:n第一阶段(19691983):1969年,美国ARPANET诞生,用于将几个军事及研究用的主机联系起来。1983年,TCP/IP应用到ARPANET中,使得internet得以迅速发展。以ARPANET 为中心,组成新的互联网(internet),称为Internet。n第二阶段(19831994):用于教育和科研领域的NSFNET(National Science Foundation Net)形成n第三阶段(1994Now):Internet的商业化运作。网络通信协议/接口n网络通信协议 计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。n网络通信结构为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间 能进行信息交换。接口包括两部分:n硬件装置:实现结点之间的信息传送 n软件装置:规定双方进行通信的约定协议OSI的分层思想nOSI:开放系统互连(Open System Interconnection),采用分层的结构化技术。n分层的理由:n将网络简化n模块化的设计网络nOSI参考模型(OSI/RM,Open System Interconnection/Reference Model)共分为7层,最高层为用户层,最底层为物理层。OSI的七层模型表 示应 用会 话网 络传 输数据链路物 理TCP协议nTCP协议为一种可靠的端对端协议:重发一切没有收到的数据,进行数据内容准确性检查并保证分组的正确顺序。nTCP协议位于OSI参考模型的传输层表 示应 用会 话网 络传 输数据链路物 理TCPIP协议nIP协议是网络上的计算机进行连接的基础nIP协议是不可靠的:无论传送正确与否都不进行检验、不回送确认、不保证分组的正确顺序nIP协议位于OSI参考模型的网络层表 示应 用会 话网 络传 输数据链路物 理IPTCP/IP协议nTCP/IP:是Internet上不同系统之间互联的一组协议。它为分散和不同类型的硬件提供了一个通用的编程接口。TCP/IP 协议使Internet尽可能成为一个分散、无序的网络。nTCP/IP通常被看成一个4层模型:应用层、传输层、网络层以及数据链路层+物理层。OSI和TCP/IP的分层对应OSI 参考模型表 示应 用会 话网 络传 输数据链路物 理应 用网 络传 输物理+数据链路TCP/IP 参考模型数据的封装和拆封n位于TCP/IP各个层的数据通常用一个公共的机制来封装:定义描述元信息和数据报的部分真实信息的报头的协议,这些元信息可以是数据源、目的地和其他的附加属性。来自于高层的协议封装在较低层的数据报中,当信息在不同的层之间传递时,都会在每一层重新构建一次。IP地址的分配nIP地址的定义n为了实现Internet上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址-IP地址nIP地址是数字型的,32位(32bit),由4个 8位的二进制数组成,每8位之间用圆点隔开n网络标识(network id)和主机标识(host id)nIP地址被分成了A、B、C、D、E五类,每个类别的网络标识和主机标识各有规则。网络IP地址的构成1Bits:0NNNNNNNHostHostHost8 916 1724 2532Range(1-126)110NNNNNNNetworkHostHost8 916 1724 2532Range(128-191)1110NNNNNNetworkNetworkHost8 916 17242532Range(192-223)Bits:Bits:Class A:Class B:Class C:常见 TCP 端口和对应服务端口对应服务 7 Echo服务器21Ftp23telnet25SMTP79Finger80HTTPJava中的“ping”(案例13-1)n在命令行中,可以通过“ping host”的方法得到指定主机的IP地址n通过中的InetAddress类,可以得到指定主机的IP地址n如果没有指定机器,则将会返回本地主机的IP地址端口(port)n计算机与外界交流的出入口n是一种抽象的软件结构,包括一些数据结构和I/O(基本输入/输出)缓冲区n端口号可以从0到65535,通常将它分为三类:n公认端口(Well Known Ports):从0到1023,它们紧密绑定(Binding)一些服务n注册端口(Registered Ports):从1024到49151。它们松散地绑定一些服务n动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口URL类n获得网络地址URLConnection类n getiInputStream()n getOutputStream()InetAddress类Socketn套接字(Socket):表示一个系统的IP地址和端口号的结合。nTCP/IP连接的一个端点n用来处理两个流对象n创建TCP Socket需要的四个信息:n本地系统的IPn本地应用程序使用的TCP端口号n远程系统的IPn远程应用程序相应的TCP端口号Java Socket编程.ServerSocket/.Socket两个类用于建立一个双边的通信。ServerSocket等待来自客户端的连接,而Socket 连接到一个服务器端。ServerSocket类nServerSocket类用于侦听一个客户端的Socket连接,如果没有连接,它将一直等待。nServerSocket构造器:nServerSocket(int port):用指定的端口port来创建一个侦听SocketnServerSocket(int port,int backlog):加上一个用来改变连接队列长度的参数backlog。nServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个 IP地址的情况下,允许通过localAddr这个参数来指定侦听的IP地址。nServerSocket方法:nSocket accept()nclose()Socket类nSocket类构造器nSocket()nSocket(InetAddress address,int port)nSocket(InetAddress address,int port,InetAddress localAddr,int localPort)nSocket(String host,int port)nprotected Socket(SocketImpl impl)nSocket(String host,int port,InetAddress localAddr,int localPort)nSocket方法:ngetInputStream()ngetOutputStream()nclose()Socket通信模型Server端ServerSocket s(port#)s.accept()/等待连接SocketOutputStreamInputStreamsocket.close()Client端Socket (host,port#)(试图连接)OutputStreamInputStreamsocket.close()Socket通信例子(案例13-2)ServerSocket server=new ServerSocket(1234);Socket sk=server.accept();BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream();System.out.println(br.readLine();br.close();server.close();Java网 络 编 程(下)利用多线程实现双向的Socket通信URL类利用NIO实现非阻塞Socket通信URLURL(Uniform Resource Locator)-统一资源定位器,表示Internet上某一资源的地址。URL组组成成:协议名和资源名protocol:resourceNameURL举举例例:http:/http:/ftp:/利用多线程实现双向的Socket通信(案例13-3)利用多线程实现双向的Socket通信URL类常用构造方法public URL(String spec);例 如:URL u1=new URL(“http:/ URL(URL context,String spec);例 如:URL u2=new URL(u1,“welcome.html”);public URL(String protocol,String host,String file);例 如:URL u3=new URL(“http”,“”,“developers/index.html”);public URL(String protocol,String host,int port,String file);例 如:URL u4=new URL(“http”,“”,80,“developers/index.html”);URL例 子(案 例 13-4)URL url2=null;URLConnection conn=null;String nextLine=null;StringTokenizer tokenizer=null;Collection urlCollection=new ArrayList();tryurl2=new URL(urlString);conn=url2.openConnection();conn.setDoOutput(true);conn.connect();BufferedReader Reader1=new BufferedReader(new InputStreamReader(conn.getInputStream();while(nextLine=Reader1.readLine()!=null)tokenizer=new StringTokenizer(nextLine);while(tokenizer.hasMoreTokens()String urlToken=tokenizer.nextToken();if(hasMatch(urlToken)urlCollection.add(trimURL(urlToken);Socket NIO通信模型和Socket 非阻塞通信相关的NIO类Selector:所有非阻塞技术的主要对象,它监视着已注册的Selectable通道,当某个通道有事件发生的时候,它将触发会触发一个事件。ServerSocketChannel/SocketChannel:用于提供非阻塞Socket通信SelectionKey:每个“键”代表一个单独的客户端子请求并包含识别客户端和请求类型的信息InetSocketAddress:一个用于表示Socket IP地址和端口号相结合的网络地址NIO Socket通信例子(案例13-5)NBClient.javaNBServer.java小结计 算 机 网 络 基 础 TCP/IP协议 IP地 址 及 网 络 掩 码 使用包中的类实现网络通信Socket通信URL类及其用法