第11章 Java网络编程 本章要点 11.1 网络基础 11.2 InetAddress编程 11.3 URL编程

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

Java 游戏开发 学习情境 7 :网络对弈程序 08 游戏 3-2. 目标与任务 目标: ◦ 为游戏添加网络通信功能和游戏逻辑 , 利用 Socket 进行网络通信, C/S 架构服 务器端和客户端编写, B/S 架构实现。 任务: ◦ 开发网络对弈程序.
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
第十讲 网络通信 1、网络基本概念 2、Java与Internet 3、使用InetAddress 4、使用URL 5、Socket通信
第十五章 网络编程.
第9章 网络通信 1.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
实验4 基于Socket的C/S程序开发 实验目的
在PHP和MYSQL中实现完美的中文显示
第九章 字符串.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Java语言程序设计 清华大学出版社 第9章 网络通信.
Hadoop I/O By ShiChaojie.
第14章 Java网络编程 Java语言提供了强大的网络编程功能,能够处理各种网络资源以及进行网络通信。java.net包定义了Java语言网络编程的主要工具类。其中,包括代表网络IP地址的InetAddress类;与URL有关的URL类和URLConnection类;与网络通信有关的Socket类和ServerSocket类。本章包括以下知识点。
第二讲 搭建Java Web开发环境 主讲人:孙娜
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
大学计算机基础 典型案例之一 构建FPT服务器.
管理信息结构SMI.
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
实用组网技术 第一章 网络基础知识.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第17章 网站发布.
Chapter 11:Java网络编程 授课教师:赵小敏 浙江工业大学 软件学院
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
第十一章 Java的网络功能.
第 8 章 网络程序设计.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
5.3 简单的tcp通讯 信息工程系 向模军 Tel: QQ:
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
2019/5/3 JAVA Socket(UDP).
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
数据报分片.
Chapter 18 使用GRASP的对象设计示例.
Visual Basic程序设计 第13章 访问数据库
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
第四章 UNIX文件系统.
第十二章 Java网络编程 1.URL编程 2.Socket网络编程 3.Datagram网络编程.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
入侵检测技术 大连理工大学软件学院 毕玲.
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
Presentation transcript:

第11章 Java网络编程 本章要点 11.1 网络基础 11.2 InetAddress编程 11.3 URL编程 在Internet(互联网)被广泛使用的今天,网络编程显得日益重要。网络应用是Java语言取得成功的领域之一,它已经成为现在Internet上最流行的一种编程语言。 Java语言的网络功能非常强大,其网络类库不仅使我们可以开发访问Internet应用层程序,还可以实现网络底层的通信。 本章要点 11.1 网络基础 11.2 InetAddress编程 11.3 URL编程 11.4 Socket编程 11.5 数据报通信 思考与练习11

11.1 网络基础 11.1.1 TCP/IP协议 网络通信协议是计算机间进行通信所要遵循的各种规则的集合。Internet的主要协议有:网络层的IP协议,传输层的TCP、UDP协议,应用层的FTP、HTTP、SMTP等协议。 其中,TCP/IP(传输控制协议/网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则。TCP/IP网络参考模型包括四个层次:应用层、传输层、网络层、链路层。 连接到TCP/IP网络中的每台计算机(或其他设备)都有唯一的地址,这就是IP地址。IP地址实质上是一个32位的整数,通常以“%d.%d.%d.%d”的形式表示,其中每个d是一个8位整数。 在TCP/IP网络中,不同的机器之间进行通信时,数据的传输是由传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等。 TCP/IP网络中最常用的传输协议-TCP(Transport Control Protocol)和UDP(User Datagram Protocol)就属于这一层。

11.1 网络基础 11.1.1 TCP/IP协议 传输层通常以TCP和UDP协议来控制端点到端点的通信。用于通信的端点是由Socket来定义的,而Socket是由IP地址和端口号组成的。 TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

11.1 网络基础 11.1.2 通信端口 一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。 端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是TCP和UDP的基础。 IP协议使用IP地址使数据投递到正确的计算机上,TCP和UDP协议使用端口号(port)将数据投递给正确的应用程序。 端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留,专门给那些通用的服务(well-known services),常见的有:http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口为23等等。因此,当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。

11.1 网络基础 11.1.3 URL URL是统一资源定位符(Uniform Resource Locator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图像文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等)。通过URL,就可以访问Internet。浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源。 一个URL包括两部分内容:协议名称和资源名称,中间用冒号隔开: 协议名://资源名 如:http://www.sohu.com 协议名称指的就是获取资源时所使用的应用层协议,如http,ftp,file等;资源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。当然,并不是所有的URL都必须包含这些内容。 一个完整的URL如下: http://home.netscape.com:80/home/white_paper.html#intro_1 协议 主机域名(IP地址)端口号 目录文件名 HTML参考点

11.1 网络基础 11.1.4 客户机/服务器模式 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

11.1 网络基础 11.1.5 Java网络编程 Java 通过前面介绍的流式输入/输出接口和增加在网络上建立输入/输出对象特性这两个方法支持TCP/IP。Java支持TCP和UDP协议族。TCP用于网络的可靠的流式输入/输出。UDP支持更简单的、快速的、点对点的数据报模式。 Java的网络编程分为三个层次: 1.最高一级的网络通信就是我们前面章节中讲的从网络上下载Applet。客户端浏览器通过HTML文件中的<applet>标记来识别Applet,并解析Applet的属性,通过网络获取Applet的字节码文件。 2.前面我们介绍了声音播放和图像显示,其中声音文件和图像文件的获取是次一级的通信。通过类URL的对象指明文件所在位置,并从网络上下载声音和图像文件。

11.1 网络基础 11.1.5 Java网络编程 3.最低一级的通信是利用java.net包中提供的类直接在程序中实现网络通信。 11.1 网络基础 11.1.5 Java网络编程 3.最低一级的通信是利用java.net包中提供的类直接在程序中实现网络通信。 针对网络通信的不同层次,Java提供的网络功能有四大类:InetAddress 、URLs、Sockets、Datagram。 (1)URLs:面向应用层。通过URL,Java程序可以直接送出或读入网络上的数据。 (2)InetAddress:面向的是IP层。用于标识网络上的硬件资源。 (3)Sockets和Datagram:面向的则是传输层。Sockets使用的是TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。Datagram则使用UDP协议,是另一种网络传输方式,它把数据的目的地记录在数据包中,然后直接放在网络上。

11.1 网络基础 11.1.5 Java网络编程 Java网络编程中主要使用的java.net包中的类有: 11.1 网络基础 11.1.5 Java网络编程 Java网络编程中主要使用的java.net包中的类有: 面向IP层的类:InetAddress 面向应用层的类:URL、URLConnection TCP协议相关类:Socket、ServerSocket UDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket 可能产生的异常: BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException

11.2 InetAddress编程 无论你是在打电话、发送邮件或建立与Internet的连接,地址是基础。InetAddress 类用来封装IP地址和该地址的域名。 InetAddress类可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。每个InetAddress对象包含了IP地址、主机名等信息。 InetAddress类没有构造方法,因此不能用new来构造一个InetAddress实例。通常是用它提供的静态方法来获取: public static InetAddress getByName(String host) host可以是一个机器名,也可以是一个形如“%d.%d.%d.%d”的四个十进制数的IP地址或一个DSN域名。 public static InetAddress getLocalHost() public static InetAddress[] getAllByName(String host) 这三个方法通常会产生UnknownHostException异常,应在程序中捕获处理。 InetAddress 类也有一些非静态的方法,如本书表11-1所示。

11.3 URL编程 11.2.1 创建URL对象 URL类有以下几种方式创建URL对象: 1.URL(String, String, int, String): 构造一个URL类,第一个String类型的参数是协议的类型,可以是http,ftp,file等。第二个String类型参数是主机名,int类型参数是指定端口号,最后一个参数是给出文件名或路径名。 2.URL(String, String, String): 构造一个URL类,参数含义与上相同,使用缺省端口号。 3.URL(URL, String): 构造一个URL类,使用给出的URL和相对路径,String类型参数是相对路径。 4.URL(String): 使用URL字符串构造一个URL类。 当创建URL时发生错误,系统会产生异常MalformedURLException,这是非运行时异常,必须在程序中捕获处理。

11.3 URL编程 11.2.2 获取URL对象的属性 一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性: public String getProtocol():获取该URL的协议名 public String getHost() :获取该URL的主机名 public String getPort() :获取该URL的端口号 public String getPath() :获取该URL的文件路径 public String getFile() :获取该URL的文件名 public String getRef() :获取该URL在文件中的相对位置 public String getQuery() :获取该URL的查询名 public String toExternalForm():获取代表URL的字符串

11.4 Socket编程 Socket(插座)通信属于网络底层通信。Socket最先应用于Unix操作系统,如果了解Unix系统的输入/输出(I/O)的话,就很容易掌握Socket,因为Socket数据传输其实就是一种特殊的I/O。 在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。 在Java中可以将Socket类和ServerSocket类分别用于Client端和Server端,在任意两台机器间建立连接。

11.4 Socket编程 11.4.1 Socket与ServerSocket类 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。 尽管Socket编程是低层次网络编程但并不等于它功能不强大,恰恰相反,正因为层次低,Socket编程比基于URL的网络编程提供了更强大的功能和更灵活的控制,但是却要更复杂一些。 java在包java.net中提供了两个类:Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。

11.4 Socket编程 11.4.2 Socket通信 Socket通常用来实现C/S结构。使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息,一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。 进行Socket通信,需要完成三个部分的工作: 1.建立服务器类 在服务器端,用Java中的服务器类-ServerSocket,使用端口号作为参数来创建服务器对象。 例如: ServerSocket server = new ServerSocket(2000) 这条语句创建了一个服务器对象,这个服务器使用2000号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为2000时,服务器对象server便响应这个连接。

11.4 Socket编程 11.4.2 Socket通信 接下来用server.accept()方法创建一个Socket对象。服务器端便可以利用这个Socket对象与客户端进行通讯。 例如: Socket incoming = server.accept() 紧接着用下面语句得到输入流和输出流,并进行封装: BufferedReader in =new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter(incoming.getOutputStream(),true); 随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

11.4 Socket编程 11.4.2 Socket通信 每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。 例如:in.close(); out.close(); socket.close();

11.4 Socket编程 11.4.2 Socket通信 2.建立客户端代码 相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的IP以及服务器的端口作为参数创建一个Socket对象。得到这个对象后,就可以用前面介绍的方法实现数据的输入和输出。 例如: Socket socket = new Socket("192.168.1.1",2000); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); 以上的程序代码建立了一个Socket对象,这个对象连接到IP地址为192.168.1.1的主机上、端口为2000的服务器对象,并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。

11.4 Socket编程 11.4.2 Socket通信 3.建立用户界面 大家可以利用前面讲解的知识,根据自己的喜好建立自己的用户界面。 经过以上三个步骤,就可以建立一个比较简单的对话程序。但是,为了使这个程序更加完善,应将服务器端的程序变为多线程。这样可以使服务器为多个客户端服务。

11.5 数据报通信 数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能送到目的地,所以一般用于传送非关键性的数据。 发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类。 下面分别介绍: 1.DatagramPacket类 它是进行数据报通信的基本单位,它包含了需要传送的数据、数据报的长度、IP地址和端口等。 DatagramPacket类的构造方法有两种: (1)DatagramPacket(byte [], int):构造一个用于接收数据报的DatagramPacket类。 byte []类型的参数是接收数据报的缓冲,int类型的参数是接收的字节数。 (2)DatagramPacket(byte [], int, InetAddress, int):构造一个用于发送数据的DatagramPackte类。 byte []类型参数是发送数据的缓冲区,int类型参数是发送的字节数,InetAddress类型参数是接收机器的Internet地址,最后一个参数是接收的端口号。

11.5 数据报通信 2.DatagramSocket类 DatagramSocket类是用来发送数据报的Socket,它的构造方法有两种: 11.5 数据报通信 2.DatagramSocket类 DatagramSocket类是用来发送数据报的Socket,它的构造方法有两种: (1)DatagramSocket():构造一个用于发送的DatagramSocket类。 (2)DatagramSocket(int):构造一个用于接收的DatagramSocket类。 构造完DatagramSocket类后,就可以发送和接收数据报。 3.发送和接收过程 发送数据报,需要在接收端先建立一个接收的DatagramSocket。在指定端口上监听,构造一个DatagramPacket类指定接收的缓冲区(DatagramSocket的监听将阻塞线程)。 在发送端需要首先构造DatagramPacket类,指定要发送的数据、数据长度、接收主机地址及端口号,然后使用DatagramSocket类来发送数据报。接收端接收到后,将数据保存到缓冲区,发送方的主机地址和端口号一并保存。随后将接收到的数据报返回给发送方,并附上接收缓冲区地址、缓冲长度、发送方地址和端口号等信息,等待新的数据。