第9章 网络编程_第1页
第9章 网络编程_第2页
第9章 网络编程_第3页
第9章 网络编程_第4页
第9章 网络编程_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章网络编程《Java基础案例教程》(第3版)学习目标/Target熟悉InetAddress类的使用,能够使用InetAddress类的常用方法获取和操作IP地址信息了解网络通信协议,能够简述TCP/IP参考模型的4个层次了解IP地址和端口号,能够简述IP地址和端口号的作用及表示形式学习目标/Target掌握基于UDP的网络编程,能够使用DatagramPacket类和DatagramSocket类编写UDP通信程序掌握基于TCP的网络编程,能够使用ServerSocket累和Socket类编写TCP通信程序了解UDP与TCP,能够简述UDP与TCP各自的特点章节概述/

Summary计算机网络已经成为人们工作和生活中不可或缺的一部分,通过网络互连的计算机可以完成信息传递、资源共享和协通工作等。而计算机之间要进行通信,需要通过网络程序来实现。下面将对网络编程的相关知识进行详细讲解。目录/Contents0102网络编程基础基于UDP的网络编程03基于TCP的网络编程网络编程9.19.1网络编程网络编程与传统的本地编程有显著区别,网络编程是基于计算机网络实现各种功能,需要考虑计算机之间的通信和数据交换。对此,在学习网络编程之前,了解网络编程的基础知识是非常重要的,下面将对网络编程的基础知识进行讲解。9.1.1网络编程概述

先定一个小目标!了解网络编程概述,能够简述网络编程是什么,以及常见的网络通信架构9.1.1网络编程概述网络编程是一种编程方式,主要涉及网络协议、套接字编程和数据传输等技术。基于网络编程可以实现应用程序与网络中其他设备上的应用程序之间的交互,实现计算机网络中各设备间的通信和数据交换。网络编程广泛应用于互联网、局域网、内网等不同范围的网络环境中,可用于创建各种应用系统和服务端程序。9.1.1网络编程概述网络编程之前,通常需要先考虑网络通信的架构,网络通信架构决定了应用程序之间如何进行通信的方式和模式。常见的网络通信架构包括CS(Client/Server,客户端/服务器)架构和BS(Browser/Server,浏览器/服务器)架构,下面对这两种架构分别进行讲解。9.1.1网络编程概述1.CS架构CS架构需要用户在计算机或手机上安装客户端程序,在客户端中通过客户端程序向服务器发送请求,并接受服务器返回的数据信息。由于客户端程序是自主开发的,因此可以根据具体需求进行优化和定制,更好地满足复杂计算和数据处理的需求。此外,CS架构还可以更好地支持分布式系统和多用户环境,适用于需要高度交互和实时响应的应用系统。CS架构的结构如下图所示。9.1.1网络编程概述2.BS架构BS架构是一种广泛应用于Web领域的网络通信架构。在BS架构中无须开发客户端程序,而是以Web浏览器作为客户端,用户只需要通过浏览器输入网址或单击链接,发起访问请求,服务器就会将相应的数据以网页的形式返回给浏览器,用户可以直接在页面上查看和操作。BS架构的优点在于,它提供了良好的跨平台性和可访问性。此外,客户端软件是通用的Web浏览器,其更新和维护成本相对较低。9.1.1网络编程概述BS架构和CS架构是两种不同的网络架构模式,它们有各自的优缺点,选择网络通信架构取决于应用程序的需求和特点。如果应用程序需要面向广大用户,跨平台访问,并且主要涉及展示和交互,那么BS架构是一个不错的选择。而如果应用程序需要进行复杂的计算和数据处理,并且对性能有较高要求,那么CS架构可能更适合。9.1.2IP地址和端口号熟悉IP地址和端口号,能够简述IP地址和端口号的作用及表示形式

先定一个小目标!9.1.2IP地址和端口号1.IP地址IP(InternetProtocol,互联网协议)地址是互联网协议提供的一种统一的地址格式,用于唯一标识网络中的通信实体,网络中的请求可以根据这个标识找到具体的通信实体。互联网协议有多个版本:IPv4(Internet

Protocol

version

4,互联网协议第4版),由4个字节大小的二进制数表示IP地址。由于二进制形式表示的IP地址不便于记忆和处理,因此通常会将IP地址写成十进制形式,每个字节用一个十进制数字(0~255)表示,数字之间用符号.分隔。IPv6(Internet

Protocol

version

6,互联网协议第6版),使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的8×1028倍,达到2128个。9.1.2IP地址和端口号1.IP地址在计算机网络中,localhost是一个特殊的主机名,用于表示本地设备或计算机。对应IPv4的IP地址是,而对应IPv6的IP地址是::1。这些地址被称为回送地址,它们指向本地机器自身。当程序连接到localhost时,实际上是程序与本地机器进行通信。9.1.2IP地址和端口号1.IP地址Java中提供了InetAddress类用于代表IP地址,该类中提供了一系列与IP地址相关的方法,用于获取和操作IP地址信息。需要注意的是,InetAddress类没有提供公开的构造方法,而是提供了静态方法来获取InetAddress对象。InetAddress类的常用方法如下表所示。方法声明功能描述staticInetAddressgetByName(Stringhost)获取host对应的InetAddress对象,host可以为主机名或IP地址staticInetAddressgetLocalHost()获取本地主机的InetAddress对象StringgetHostName()获取当前IP地址对象的主机名booleanisReachable(inttimeout)判断在指定毫秒内是否可以连通该IP地址对应的主机,连通返回trueStringgetHostAddress()获取字符串格式的IP地址9.1.2IP地址和端口号1.IP地址下面通过一个案例来演示InetAddress类常用方法的基本使用。Example01.java源代码9.1.2IP地址和端口号1.IP地址案例的运行结果如下图所示。9.1.2IP地址和端口号2.端口号一个通信实体可能同时有多个程序提供服务,实现通信时,需要指定数据交给哪个程序处理,这是就需要使用端口。端口是应用程序与外界交流的出入口,是一种抽象的软件结构,用于唯一标识一个应用程序在通信中的位置。通过使用不同的端口号,不同应用程序可以在同一个网络接口中通信。端口通过端口号进行标记,IP地址和端口号的作用如下表所示。9.1.2IP地址和端口号2.端口号端口号用0~65535的整数表示,端口号通常分为以下三类。公认端口:在0~1023之间,被预先定义用于特定网络服务和应用。例如,HTTP使用的端口号为80,FTP使用的端口号为21。注册端口:在1024~49151之间,通常被分配给用户进程或特定应用程序。例如,Tomcat使用的端口号为8080,MySQL使用的端口号为3306。动态端口:在49152~65535之间,通常被动态分配给客户端应用程序。动态分配可以保证不同应用之间不会因为端口冲突而发生通信错误。9.1.2IP地址和端口号2.端口号在开发应用程序时,可以选择使用1024~49151的注册端口。需要注意的是,同一台机器上不能有两个程序同时使用同一个端口,如果一个应用程序尝试绑定一个已经被其他服务或应用占用的端口号,那么当前程序将会启动失败。9.1.3网络通信协议了解网络通信协议,能够简述TCP/IP参考模型划分的4个层次

先定一个小目标!9.1.3网络通信协议计算机网络中,位于同一网络中的计算机在进行连接和通信时需要遵守一定的规则,这些规则被称为网络通信协议。网络通信协议定义了数据在网络中的传输格式、传输速率、传输步骤等,通信双方必须同时遵守才能完成数据交互。9.1.3网络通信协议网络通信协议目前主要分为两个参考模型:OSI参考模型和TCP/IP参考模型。OSI参考模型是由国际标准化组织在20世纪80年代早期制定的一套规范集合,旨在促进全球范围内计算机的开放式通信。OSI参考模型采用7层协议结构,这种划分在实际应用中意义不大,反而增加了复杂性。TCP/IP参考模型将OSI参考模型重新划分为4个层次,以TCP/IP协议为核心。TCP/IP参考模型简化了OSI模型的层次结构,并明确定义了各层次的功能和作用使得计算机网络的设计、实现和管理更加简单高效。9.1.3网络通信协议TCP/IP参考模型划分的四个层次具体如下图所示。9.1.3网络通信协议TCP/IP参考模型划分的四个层次中,每层分别负责不同的通信功能,具体如下。应用层:主要为互联网中的各种网络应用提供服务。在这一层,各种应用程序通过使用特定的协议(如HTTP、FTP等)进行网络通信。传输层:主要为应用层实体提供端到端的通信功能。在这一层,主要有两个重要的协议:TCP和UDP。网际互联层:主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。在这一层,主要使用的有IP和IGMP等协议。网络接入层:主要负责监视数据在主机和网络之间的交换。事实上,TCP/IP参考模型本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议。9.1.3网络通信协议在TCP/IP参考模型中,网际互联层和网络接入层主要用于处理网络硬件和操作系统级别的功能,这些层次的内容超出了Java的设计范围。因此,基于CS架构进行Java网络编程时,主要关注的是传输层中的UDP和TCP这两个协议。UDP和TCP是面向不同需求的传输协议,应用程序可以根据自身的需求选择适合的协议进行通信。9.1.3网络通信协议1.UDPUDP是一种无连接的通信协议,发送端和接收端在数据传输时,不建立逻辑连接。UDP具有资源消耗小、通信效率高、延迟低的特点,通常在音频、视频和普通数据传输中使用。例如,视频会议通常使用UDP,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。然而,由于UDP无法保证数据的完整性,在传输重要数据时不建议使用UDP。9.1.3网络通信协议2.TCPTCP是一种面向连接的通信协议,即在传输数据之前,发送端和接收端先建立逻辑连接,然后再传输数据。TCP确保了计算机之间可靠、无差错地数据传输。相比UDP,TCP的传输速度较慢,但传输的数据更加可靠,TCP可以确保传输的数据在发送和接收过程中不丢失、不重复和按顺序到达,保证了传输数据的安全性和完整性。因此,TCP在文件传输、金融产品等数据通信领域得到广泛应用。9.1.3网络通信协议2.TCP在TCP连接中,需要明确客户端和服务器端的角色。连接的建立需要经过“三次握手”,其过程如下图所示。基于UDP的网络编程9.29.2基于UDP的网络编程掌握基于UDP的网络编程,能够使用DatagramPacket和DatagramSocket类编写UDP通信程序

先定一个小目标!9.2基于UDP的网络编程基于UDP通信的过程就像是货运公司在两个码头间发送货物一样,在码头发送和接收货物需要使用集装箱来装载货物。JDK提供了DatagramPacket类,该类实例对象相当于一个集装箱,用于承载发送或接收的数据。此外,JDK还提供了DatagramSocket类,该类的作用类似于码头,其实例对象可以发送和接收Datagrampacket数据报。基于UDP通信的过程如下图所示。9.2基于UDP的网络编程DatagramPacket类用于封装UDP通信中的数据,DatagramPacket对象也称为报文对象。在发送端和接收端创建DatagramPacket对象时,使用的构造方法有所不同。接收端的DatagramPacket对象只需要接收一个字节数组来存放接收到的数据,而发送端的DatagramPacket对象不但要存放被发送的数据,还需要指定数据的目标IP地址和端口号。1.DatagramPacket类9.2基于UDP的网络编程DatagramPacket类常用的构造方法如下。DatagramPacket(byte[]buf,intlength):接收长度为length的数据包,其中length参数必须小于或等于buf参数的长度。DatagramPacket(byte[]buf,intoffset,intlength):offset参数用于指定传入数据包缓冲区buf的偏移量为offset,即从offset位置开始接收数据。DatagramPacket(byte[]buf,intlength,InetAddressaddr,intport):将数据包数据buf中length长度的数据发送到指定主机的指定端口号。DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddr,intport):offset参数用于指定一个数组中发送数据的偏移量为offset,即从offset位置开始发送数据。1.DatagramPacket类9.2基于UDP的网络编程DatagramPacket类提供了一些用于操作UDP通信的方法,其中常用的方法如下表所示。1.DatagramPacket类方法声明功能描述InetAddressgetAddress()用于获取发送端或者接收端的IP地址intgetPort()用于获取发送端或者接收端的端口号byte[]getData()用于获取将要发送或者接收到的数据intgetLength()用于获取将要发送或者接收到的数据的长度9.2基于UDP的网络编程DatagramSocket类用于创建基于UDP通信时的发送端对象和接收端对象,该类提供了多个构造方法用于创建发送端对象和接收端对象。常用构造方法如下:DatagramSocket():创建一个未绑定到任何地址和端口的DatagramSocket对象。DatagramSocket(intport):创建一个绑定到指定端口的DatagramSocket对象。DatagramSocket(intport,InetAddressaddr):创建一个绑定到指定地址addr和端口port的

DatagramSocket

对象。2.DatagramSocket类9.2基于UDP的网络编程DatagramSocket类提供了发送和接收UDP数据报的一系列方法,其中常用的方法如下表所示。2.DatagramSocket类方法声明功能描述voidreceive(DatagramPacketp)用于接收DatagramPacket数据报,在接收到数据之前会一直处于阻塞状态,如果发送消息的长度比数据报长,则消息将会被截取voidsend(DatagramPacketp)用于发送DatagramPacket数据报,发送的数据报中包含将要发送的数据、数据的长度、目标主机的IP地址和端口号voidclose()关闭当前的Socket,通知驱动程序释放为这个Socket保留的资源9.2基于UDP的网络编程下面通过一个案例演示如何实现UDP通信。在一个完整的UDP通信过程中,至少需要一个发送端和一个接收端。本案例演示的为一个发送端和一个接收端的通信情况。首先编写接收端程序。案例演示UDPServer.java源代码9.2基于UDP的网络编程运行文件UDPServer.java,结果如下图所示。案例演示9.2基于UDP的网络编程接着编写发送端程序,用于给接收端发送数据。案例演示UDPClient.java源代码9.2基于UDP的网络编程再运行文件UDPClient.java,结果如下图所示案例演示9.2基于UDP的网络编程客户端程序启动后将消息成功发送出去,此时接收端程序就会收到发送端发送的数据而结束阻塞状态,并输出接收端数据,如下图所示。案例演示基于TCP的网络编程9.39.3基于TCP的网络编程相对于UDP,TCP传输数据更可靠,当需要满足对数据传输可靠性要求较高的需求时,基于TCP编程可以实现更高质量的数据传输,下面将对基于TCP的网络编程相关知识进行讲解。TCP通信掌握TCP通信,能够使用ServerSocket和Socket类编写TCP通信程序

先定一个小目标!TCP通信TCP通信严格区分客户端和服务器端。JDK中提供了Socket类和ServerSocket类分别表示客户端和服务器端。基于TCP编写程序时,先创建一个服务器端的ServerSocket对象,开启一个服务并等待客户端连接;然后创建一个客户端的Socket对象,并向服务器端发送连接请求;服务器端接收到请求后双方建立连接,便可以正式进行通信。基于TCP通信时,需要由客户端去连接服务器端,而服务器端不能主动连接客户端,Socket和ServerSocket通信过程如下图所示。TCP通信ServerSocket类的主要作用是接收客户端的连接请求,它提供了多个构造方法用于创建服务器端对象,常用的构造方法如下所示。ServerSocket():创建一个不与任何端口绑定的ServerSocket对象,默认没有监听任何端口,不能接收客户端的连接请求。需要调用bind(SocketAddressendpoint)方法将其绑定到指定的端口号后,监听指定的端口,并接受客户端的连接请求。ServerSocket(intport):创建一个ServerSocket对象,并在指定的port端口上监听连接请求。ServerSocket(intport,intbacklog):backlog参数用于指定最大连接数。ServerSocket(intport,intbacklog,InetAddressbindAddr):bindAddr参数用于指定监听发出连接请求的客户端的IP地址。1.ServerSocket类TCP通信ServerSocket类提供了一些用于监听来自客户端的连接请求和建立与客户端通信通道的方法,常用方法如下表所示。1.ServerSocket类方法名称功能描述Socketaccept()用于等待客户端的连接请求,在客户端完成连接之前会一直处于阻塞状态,当有客户端连接到服务器端时,就会返回一个与之对应的Socket对象InetAddressgetInetAddress()用于获取ServerSocket对象所绑定的IP地址booleanisClosed()该方法用于判断ServerSocket对象是否为关闭状态,如果是关闭状态则返回true,否则返回falsevoidbind(SocketAddressendpoint)用于将ServerSocket对象绑定到指定的IP地址和端口号,其中参数endpoint封装了IP地址和端口号TCP通信Socket类用于建立客户端与服务器之间的连接,可以通过该连接进行数据传输。在客户端程序中,通常需要先创建一个Socket对象来与服务器建立连接,然后再使用该对象的输入输出流来发送和接收数据。Socket类常用的构造方法如下所示。Socket():创建一个没有指定IP地址和端口号的Socket对象。(只创建了客户端对象,并不会建立实际的连接)。Socket(Stringhost,intport):根据指定的主机名host和端口号port创建一个Socket对象。Socket(InetAddressaddress,intport):该方法在使用上与第2个构造方法类似,根据指定的服务器地址address和端口号port创建一个Socket对象。2.Socket类TCP通信Socket类提供了一些方法用于与服务器端进行通信,其中常用的方法如下表所示。2.Socket类方法声明功能描述intgetPort()用于获取Socket对象与服务器端连接的端口号SocketAddress

getRemoteSocketAddress()用于获取与Socket对象连接的远程服务器的网络地址,返回一个

SocketAddress

对象voidclose()用于关闭Socket连接,结束本次通信。InputStreamgetInputStream()用于获取与当前Socket关联的InputStream对象,读取发送过来的数据。OutputStreamgetOutputStream()用于获取与当前Socket关联的OutputStream对象,向远程主机发送数据。TCP通信当客户端和服务器端建立连接后,数据以I/O流的形式进行交互,从而实现通信。客户端和服务器端的数据传输如图下图所示。2.Socket类TCP通信下面对TCP通信的步骤进行说明。客户端和服务器端分别创建一个Socket对象,用于建立数据通信的管道,这样在客户端和服务器端都有一个Socket对象来访问该通信管道。客户端向服务器端发送数据时,先通过Socket对象获取一个字节输出流,然后使用字节输出流将数据写入服务器端。服务器端通过Socket对象获取字节输入流,然后使用字节输入流读取客户端发送过来的数据,并对数据进行处理。服务器端处理完数据后,如果需要返回信息给客户端,服务器端可以通过Socket对象获取一个字节输出流,并将数据写入客户端。客户端再次通过Socket对象获取输入流,使用字节输入流读取服务器端发送过来的数据。TCP通信下面通过一个案例演示如何实现TCP通信。在一个完整的TCP通信过程中,至少需要一个客户端和一个服务器端。首先编写服务器端程序,在服务器端程序中等待客户端的连接请求,并在获取到客户端连接请求后,获取并在控制台中输出客户端发送过来的数据;然后发送一些数据到客户端。TCPServer.java源代码案例演示TCP通信运行文件TCPServer.java,运行结果如下图所示。案例演示TCP通信下面编写客户端程序,在客户端程序中向服务器端发送数据,然后获取服务器端发送过来的数据,并输出到控制台。案例演示TCPClient.java源代码TCP通信运行文件TCPClient.java,运行结果如下图所示。案例演示TCP通信客户端启动后客户端往服务器端发送信息,客户端创建的Socket对象与服务器端建立连接,通过Soc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论