NCEPU网络编程2019年11月24日星期日NCEPU网络应用是Java语言取得成功的领域之一,它已经成为现在Internet上最流行的一种编程语言。Java语言在网络编程方面提供了许多方便,其他语言往往需要数页代码才能完成的事情,在Java中可能只需要一条语句就可以。2019年11月24日星期日计算机网络的基本原理计算机网络就是利用通信线路连接起来的、相互独立的计算机集合。使用网卡、电缆、集线器等连接设备连接计算机以组成网络。2019年11月24日星期日NCEPUTCP/IP(传输控制协议/网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则。TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。物理层(TCP/IP)网络参考模型2019年11月24日星期日IP地址网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这就是IP地址。在网络寻找某一台计算机都是依靠它的IP地址;IP地址由4个0-255之间的数字组成;如:192.168.0.8为了方便使用,人们给每个结点起了一个名字,把名字与IP地址建立对应关系,这就是域名系统DNS,凡域名空间有定义的域名都可以有效地转换成IP地址。2019年11月24日星期日特殊的IP地址对于本地计算机(就是你正在使用的那台计算机),有两种方法标识它:用主机名标识:localhost用IP地址标识:127.0.0.1以上两者是等价的2019年11月24日星期日端口一台计算机上可能同时运行多个网络应用程序,IP地址只能确保把数据送到指定的计算机,但不能保证把这些数据传递给哪个网络程序;为了让一个计算机可以同时运行多个网络程序,就引入了另外一个概念——端口(port)。端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务,如:http使用80端口;网络间通信其实是在网络应用程序端口之间进行的。2019年11月24日星期日端口2019年11月24日星期日URLURL(UniformResourceLocator)----统一资源定位符,表示Internet上某一资源的地址。简单地说,URL就是Web地址,俗称“网址”。URL组成:协议名和资源名。protocol://resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等。资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。如:URL举例:年11月24日星期日Java的网络功能Java提供的网络功能有四大类:InetAddress、URL、Socket、Datagram。InetAddress面向的是IP层,用于标识网络上的硬件资源。URL这种方法是通过URL的网络资源表达式形式确定数据在网络中的位置,利用URL对象中提供的方法,直接读入网络中的数据,或者将本地数据传送到网络的另一端。Socket是指两个程序通过网络进行通信的一种方式,在TCP/IP协议下的客户服务器软件通常使用socket来进行信息交流,这种方式也是传统中常用的一种方式。这种工作方式类似两个人打电话。Datagram是一种面向非连接的、以数据报方式工作的通信,适用于网络状况不稳定下的数据传输和访问。这种工作方式类似邮局寄邮件。2019年11月24日星期日NCEPU1.计算机网络就是利用通信线路连接起来的、相互独立的计算机集合。2.计算机协议就是针对计算机之间的信息交互方式、秩序以及参数所作出的规定。常用协议:TCP、IP、UDP、SNMP、SMTP、FTP、HTTP、fileJava的网络功能2019年11月24日星期日NCEPU3.通信模式Java是通过使用流模式来实现网络信息交互的,这种模式下,一个接口同时拥有两个流--输入流和输出流。当一个线程向另一个线程发送数据时,只需将数据写入到相应接口的输出流上,而另一个进程在接口的“另一端”从输入流上读取数据。4.Java.net包Java.net包提供了低级和高级的网络功能。它包含了大部分用于访问网络资源的类。Java的网络功能2019年11月24日星期日NCEPUjava.net包中主要的类:面向IP层的类:InetAddress面向应用层的类:URL、URLConnection面向传输层的类:TCP协议相关类:Socket、ServerSocketUDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocketjava.net包中主要的类和可能产生的异常2019年11月24日星期日NCEPU可能产生的异常:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceExceptionjava.net包中主要的类和可能产生的异常2019年11月24日星期日NCEPU网络功能按层次与使用方法分为三类:(1)URL这种方法是通过URL的网络资源表达式形式确定数据在网络中的位置,利用URL对象中提供的方法,直接读入网络中的数据,或者将本地数据传送到网络的另一端。网络功能与使用方法2019年11月24日星期日NCEPU(2)Socket(套接字IP+端口)(重点内容)Socket是指两个程序通过网络进行通信的一种方式,在TCP/IP协议下的客户服务器软件通常使用socket来进行信息交流,这种方式也是传统中常用的一种方式。这种工作方式类似两个人打电话。(3)DataGram(数据报)Datagram方式是三种网络功能中最低级的一种,它是一种面向非连接的、以数据报方式工作的通信,适用于网络状况不稳定下的数据传输和访问。这种工作方式类似邮局寄邮件。网络功能与使用方法2019年11月24日星期日NCEPUSocket什么是socket?Socket是网络上运行的程序之间双向通信链路的最后终结点网络服务Mailftpfinger20telnet数据结构I/O缓冲区端口2123客户程序SocketIP,portIP与端口的组合得出一个套接字,可以完全分辨internet上运行的程序2019年11月24日星期日NCEPUSocket是TCP/IP协议中的传输层接口,是建立在稳定连接基础上的以流传输数据的通信方式。它是目前实现客户/服务器(Client/Server)模式应用程序的主要手段。底层网络通信编程2019年11月24日星期日NCEPU对等通信示例“你好”“Hello”传真中国教师翻译秘书“Hallo”“Hello”传真德国教师翻译秘书对交谈内容的共识用英语对话使用传真通信P3P2P1物理通信线路2019年11月24日星期日NCEPU一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了(0-65535)。端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是TCP和UDP的基础。网络服务httpftp其他服务23telnet数据结构I/O缓冲区端口2180客户程序SocketIP+portIP与端口号组合而得出的Socket,可以完全分辨Internet上运行的程序。端口号(要求大于1023,0-1023为系统服务占用)2019年11月24日星期日NCEPU(socket=Ip+端口号)(1)InetAddress类InetAddress类用来区分计算机网络中的不同节点,即不同计算机,并对其寻址。每个InetAddress对象包含了IP地址、主机名等信息。基于连接的流式套接字socket通信2019年11月24日星期日java.net.InetAddress该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。该类无法直接实例化,只能通过下列方法获得实例:方法原型说明staticInetAddressgetByName(Stringhost)throwsUnknownHostException返回指定主机的IP地址对象staticInetAddressgetLocalHost()throwsUnknownHostException返回本地主机的IP地址对象StringgetHostName()返回此InetAddress对象的主机名称2019年11月24日星期日importjava.net.*;//导入java.net包publicclassInetAddressDemo{publicstaticvoidmain(String[]args){try{//获得本地主机的IP地址InetAddressadd1=InetAddress.getLocalHost();System.out.println(当前本地主机:+add1);//通过DNS域名解析,获得相应服务的主机地址InetAddressadd2=InetAddress.getByName();System.out.println(网易服务器主机:+add2);//根据字符串表现形式的IP地址获得相应的主机地址(如果网络上有该IP地址的话)InetAddressadd3=InetAddress.getByName(192.168.0.22);System.out.println(IP地址为192.168.0.22的主机:+add3);}catch(UnknownHostExceptionuhe){uhe.printStackTrace();}}}根据机器名获得相应的主机地址(如果网络上有该机器名的话)InetAddressadd4=InetAddress.getByName(J104);System.out.println(机器名为J104的主机:+add4);InetAddress示例2019年11月24日星期日服务器端网络编程步骤监听端口服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口就是服务器端开放给客户端的端口。接受连接当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,如客户端IP地址等,服务器端和客户端也通过该连接进行数据交换。一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。交换数据服务器端接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送。关闭连接当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。2019年11月24日星期日上机练习查看本机的IP地址编程获取本机的IP地址和本校校园网的IP地址2019年11月24日星期日网络通讯的过程网络通讯基于“请求-响应”模型。为了理解这个模型,先来看一个审讯的场面警察:姓名嫌疑犯:XXX警察:性别嫌疑犯:男警察:年龄嫌疑犯:29……在这个例子中,警察问一句,嫌疑犯回答一句,如果警察不问,则嫌疑犯保持沉默。这种一问一答的形式就是网络中的“请求-响应