操作系统课程名:Web程序设计课程号:020213005课程网址:http://授课教师:马志强教师邮箱:mzq_bim@163.com2011-2012学年第二学期内蒙古工业大学校级精品建设课程Web程序设计课程组制作第十章网络功能Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程目录10.1Java网络编程基础10.2应用层网络编程10.3传输层网络编程Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础一、基本概念1、网络通信AB网络115.24.93.6115.24.94.6协议协议端口端口Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础2、协议(protocol)1)为网络中数据交换建立的规则、标准或约定;2)不同层具有各自不同的协议。1)IP地址是一个逻辑地址;因特网上的IP地址具有全球唯一性;2)32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16。3、IP地址Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础1)标记机器的逻辑通信信道的正整数,不是物理实体。2)端口号使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。3)端口号与协议相关,TCP/IP传输层的两个协议TCP和UDP是独立的两个软件模块,因此端口号也相互独立。4、端口(protocolport)Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础二、Java的网络功能1、InetAddress面向IP层,用于标识网络上的硬件资源。2、URL面向应用层,可以通过URL的网络资源表达形式确定数据在网络中的位置。Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础3、Socket面向传输层,使用的是TCP协议。4、Datagram面向传输层,使用的是UDP协议,是另一种网络传输方式,它把数据的目的地记录在数据包中,然后直接放在网络上。Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.1Java网络编程基础三、java.net主要的类及异常Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程一、InetAddress的应用1、构造一个InetAddress实例没有构造函数,因此不能用new来构造。publicstaticInetAddressgetByName(Stringhost);publicstaticInetAddressgetLocalHost();publicstaticInetAddress[]getAllByName(Stringhost)Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程2、基础案例publicclassTestInetAddress{privatestaticvoiddisplayAllbyName(StringurlName)throwsUnknownHostException{System.out.println(urlName+”allIp:”);InetAddressallNetAddress[]=InetAddress.getAllByName(urlName);for(inti=0;iallNetAddress.length;i++){System.out.println(allNetAddress[i]);}}Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程publicstaticvoidmain(Stringargs[]){InetAddressnetAddress=null;try{netAddress=InetAddress.getLocalHost();System.out.println(netAddress);displayAllbyName(“”);displayAllbyName(“”);displayAllbyName(“”);}catch(UnknownHostExceptione){System.out.println(“NetException:”+e.getMessage());}}Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程3、运行结果Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程二、统一资源定位器(URL)URL是UniformResourceLocator,它表示Internet上某一资源的地址。1、URL的组成协议名称和资源名称,中间用冒号隔开。Protocol:resourceNameWeb程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程protocol://host_name:port_number/file_name/reference2、URL的具体结构protocol:用来指示所要获取资源的传输协议,如:http、ftp、gopher、file等host_name:用来指示资源所在的主机port_number:用来指示连接时所使用的通信端口号file_name:用来指示该资源在主机的完整文件名reference:指示资源中的某个特定位置Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程三、综合案例分析静态网页(html)的结构,提取超链接、正文以及网页的属性信息。Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程publicstaticStringBuffercontent(StringurlString)throwsIOException{StringBuffersbuffer=newStringBuffer();URLurl=newURL(urlString);HttpURLConnectionurlConnection=(HttpURLConnection)url.openConnection();BufferedReaderreader=newBufferedReader(newInputStreamReader(urlConnection.getInputStream()));Stringline=null;while((line=reader.readLine())!=null){sbuffer.append(line+\r\n);}returnsbuffer;}Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.2应用层网络编程Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程一、基于TCP的socket编程1、套接字socket的引入为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序;Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程ServerServerServerSocket(intport)Socketaccept()OutputStreamSocket.getOutputStream()InputStreamSocket.getInputSream()Socket.close()ClientSocket(InetAddressaddress,intport)OutputStreamSocket.getOutputStream()InputStreamSocket.getInputStream()Socket.close()2、socket编程原理Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程3、编程步骤1)服务器程序(1)调用ServerSocket(intport)创建一个服务器端套接字,并绑定到指定端口上;(2)调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字;(3)调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收;(4)最后关闭通信套接字。Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程2)客户端程序(1)调用Socket()创建一个流套接字,并连接到服务器端;(2)调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收;(3)最后关闭通信套接字。Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程4、案例1)单客户/服务器工作模式案例2)大学生综测系统的用户登录系统Web程序设计(WebProgramming)授课:马志强(E-mail:mzq_bim@163.com)内蒙古工业大学校级精品建设课程10.3传输层网络编程二、基于UDP的socket编程接收端(Server)发送端(Client)DatagramSocket(intport)DatagramSocket()DatagramPacket(byte[]buf,intlength)DatagramSocket.receive(DatagramPacketp)DatagramSocket.close()DatagramSocket.close()DatagramPacket(byte[]buf,intlength,