java 第十二章 网络编程

第十二章 网络编程
12.1 基本概念
12.1.1 计算机网络
.将地理位置不同的具有独立功能的多台计算机及其外部设备,
通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,
实现资源共享和信息传递的计算机系统。

	.计算机网络的作用是资源共享和网络传递。
	.计算机网络组成包括:
		.计算机硬件:计算机,外部设备,通信设备 
		.计算机软件:网络操作系统,网络管理软件,网络通信协议。 
	.计算机网络中的多台计算机具有独立功能,而不是脱离网络就无法存在的。
	 
12.1.2 网络通信协议 
	1,网络通信协议:计算机网络中是通信必须遵守的一些约定
		
		开放系统互联OSI模型制定的七层标准模型:
		应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
		
		互联网使用最多的是TCP/IP网络通信协议,
		他是一个协议族,按层次划分为四层:
		应用层,传输层,互联网络层,网络接口层(物理+数据链路层)
		
		OSI网络通信协议模型是一个参考模型 。
		TCP/IP协议是事实上的标准。
		TCP/IP协议和OSI模型不冲突,相互对应。
		
		TCP/IP协议有两个重要的协议,传输层的TCP协议,互联网络层的IP协议。
		因此,就拿这两个协议来命名协议族,TCP/IP协议就是指整个协议族。 
	
	2,网络协议的分层
		由于网络节点之间的联系很复杂,因此协议将复杂的内容分解为简单的内容,
		再将他们复合起来。
		常用的复合方式是层次方式,即同层之间可以通信,上一层可以调用下一层,
		而不与再下一层发生关系。
		用户应用程序为最高层,物理通信线路为最底层,
		期间的协议处理分为若干层并规定每层处理的任务。也规定每层的接口的标准。 
		 
12.1.3 数据封装与解封
	数据封装date encapsulation:指将协议数据单元(PUD)封装在一组协议头和协议尾的过程。
	在OSI七层参考模型中,每层主要负责与其他机器上的对等层进行通信,该过程在协议数据单元中实现,
	其中每层PDU一般由本层的协议头,协议尾,和数据封装构成。
	
	1,数据发送处理过程(数据封装)
		1,应用层将数据转交给传输层,
		   传输层添加上TCP头部,形成了段(Segment),
		   加入控制信息的过程称为封装,然后将段交给网络层。
		2,网络层接收到段,添加IP头部,形成包(Packet),然后将包交给数据链路层。
		3,链路层接收到包,添加MAC头部和尾部,形成帧(Frame) 。
		4,物理层将接收到的数据转换为比特流,然后在网络中传送。 
		
	2,数据接收处理过程(数据解封) 
	   封装反向过程。
	    
	3,总结
		发送方的数据处理方式是从高层到低层,逐层对数据进行封装。
		接收放的数据处理方式是从底层到高层,逐层对数据进行解封。
		 
	4,对等层通信概念
		接收方的每一层只把只把对该层有意义的数据拿走,或者说
		每一层只能处理发送方同等层的数据,然后将其余部分传递给上一层。
			 
12.1.4 IP地址与端口
	1,IP地址
	IP地址用来标识网络中的一个通信实体的地址。
	目前主流的32位的IPv4协议,128位IPv6协议。
	127.0.0.1为本机地址。
	192.168.0.0 ~ 192.168.255.255为私有,属于非注册地址,专门为组织机构内部使用。 
	
	2,端口
	虚拟概念,通过端口可以区分一台计算机上可能提供的多种网络应用程序。
	端口用一个16位的二进制整数表示,对应十进制范围为0~65535.
	
	IP地址就像每个人的住址,端口就是房间号。
	必须同时指定IP地址和端口号,才能正确发送数据。
	如果将IP地址比作座机号码,而端口号就像分机号。
	 
12.1.5 URL
	1,因特网上每一信息资源都有统一且唯一的地址,该地址就是URL,他是因特网的统一资源定位符。
	
	URL组成:协议,存放资源的主机域名,端口号。
	未指定端口号,则使用协议默认端口号。HTTP默认80.
	 
12.1.6 Socket
	人们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议。
	在应用层和传输层之间使用套接字Socket。
	Socket实际上是传输层供给应用层的编程接口。他是两者之间的桥梁。 
	
12.1.7 TCP协议和UDP协议
	1,联系和区别
		TCP和UDP协议是传输层的两种协议。
		Socket是传输层提供给应用层的编程接口。
		所有Socket编程就分为TCP编程和UDP编程两类。
		
		重要数据   TCP方式 打电话 建立专门虚拟连接  传输可靠
		发送失败 客户端会自动重发该数据 传输速度慢 占用系统资源大。
		
		非核心数据 UDP方式 发短信 不需要专门虚拟连接 不可靠  
		发送失败  客户端无法获得数据    传输快大 数据封包。
		
	2,TCP(Transfer Control Protocol)协议 :
		建立连接-->传输数据-->拆除连接。
		
		TCP在建立连接3步(TCP三次握手Three-way Handshake):
			.客户端请求发送一个包含同步(Synchronize)标志的TCP报文,
			 SYN同步报文会指明客户端使用的端口及TCP连接的初始序列。 
			.服务器收到客户端的SYN同步报文后,返回一个SYN+ACK报文,
			 表示客户端的请求被接受,同时TCP序号被+1,
			.客户端返回一个确认报文ACK给服务器端,同样TCP序列被+1.
			 至此,一个TCP连接完成。
			 然后才开始通信第二部,数据处理。
	
	3,UDP协议
		数据报通信方式,每个数据发送单元被封装成数据报包的形式,
		发送方将数据报包发送到网络,数据报包在网络中区寻找他的目的地。 

12.2 Java网络编程中的常用类
12.2.1 InetAddress
1,作用:InetAddress用于封装计算机的IP地址和DNS(Domain Name System域名系统)。
2,特点:
InetAddress没有构造器,如果要得到构造器,只能通过以下静态方法实现。
getLocalHost(),getByName,getAllByName(),getAddress(),getHostName();

12.2.2 InetSocketAddress
	1,作用:用于包含IP地址和端口信息,常用于Socket通信。
		     该类实现IP套接字地址(IP地址+端口号),不依赖任何协议。 

12.2.3 URL类
	IP地址唯一标识了Internet上的计算机,而URL则表示了这些计算机上的资源。
	URL类代表一个统一资源定位符,他是指向互联网资源的指针。
	资源可以是简单的文件或目录,也可以是对更复杂对象的引用。

12.3 TCP通信的实现
1,客户端(Client):第一次主动发起通信的程序。
服务端(Server):第一次通信中等待连接的程序。
一旦通信建立,客户端和服务端完全一样,没有本质区别。

2,请求--响应模式
	这个模式中,Socket类用于发送TCP消息,ServerSocket类用于创建服务器。
	套接字Socket是一种进程间的数据交换机制,起到通信端点的作用。
	单个套接字是一个端点,一对套接字则构成一个双向通信信道。
	一旦建立套接字连接,数据就可以在相同或不同的系统中双向或单向发送,
	直到其中一个端点关闭连接。
	套接字与主机地址和端口地址相关联。
	主机地址:客户端或服务器程序所在主机的IP地址。
	端口地址:客户端或服务器程序使用的主机的通信端口。
	在客户端和服务器中分别创建独立的Socket,并通过Socket的属性将两个Socket进行连接,
	这样,客户端和服务器端通过套接字所建立的连接即可使用输入/输出流进行通信。
	TCP/IP套接字是最可靠的双向流协议,使用TCP/IP可以发送任意数量的数据。
	
3,TCP/IP通信连接的简单过程
	位于A计算机上的TCP/IP软件向B计算机发送包含端口号的消息,
	B计算机的TCP/IP软件接收该消息并进行检查,
	查看是否有它知道的程序正在该端口上接收消息。
	如果有,他将该消息交给这个程序。
	要使程序有效运行,就必须有一个客户端和一个服务器。

4,通过Socket的编程顺序
	1,创建服务器ServerSocket,在创建时,定义ServerSocket的监听端口。
		这个端口用于接受客户端发来的消息。
	2,ServerSocket调用accept();方法使之处于阻塞状态。
	3,创建客户端Socket,并设置服务器的IP地址及端口。
	4,客户端发出连接请求,建立连接。
	5,分别取得服务器和客户端的Socket的InputStream和OutputStream.
	6,利用Socket和ServerSocket进行数据传输。
	7,关闭流及Socket。
	
	运行时要先启动服务器端,再启动客户端,才能得到正常的运行效果。
	
	使用多线程技术实现双通信时,则
	服务器端一个线程专门发送消息,另一个线程专门接收消息。
	客户端  一个线程专门发送消息,另一个线程专门接收消息。 

12.4 UDP通信的实现
1,DatagramPacket:数据容器(封包)
DatagramPacket类表示数据报包。数据报包用来实现封包的功能。
用法
DategramPacket(byte[] buf,int length);
构造数据报包,用来接收长度为length的数据包

	DategramPacket(bute[] buf,int length,InetAddress address,int port);
	构造数据包,用来将长度为length的包发送到指定主机上的指定端口。
	
	getAddress();
	获取发送或接收方计算机的IP地址,此数据报将要发往该机器或从该机器接收。
	
	getDate();
	获取发送或接收的数据。
	
	setDate(byte[] buf);
	设置发送的数据。

2, DategramSocket:用于发送或接受数据报包
	当服务器要向客户端发送数据时,
	需要在服务器端产生一个DategramSocket对象,在客户端产生一个DategramSocket对象。
	服务器端的DaetgramSocket将DategramPack发送到网络上,然后被客户端的DategramSocket接收。
	
	DategramSocket有两种常用的构造器
	1,用于客户端的无需任何参数。
	2,用于服务器端的需要指定端口。
	
	DategramSocket();
	用于构建数据报套接字,并将其绑定到主机上任何可用的端口。
	
	DategramSocket(int port);
	用于创建数据报套接字,并将其绑定到主机上任何可用的端口。
	
	send(DategramPacket p);
	从此套接字发送数据包。
	
	receive(DategramPacket p);
	从此套接字接收数据包。
	
	close();
	关闭此数据报套接字。

3.UDP通信编程基本步骤
	1,创建客户端的DategramSocket,创建时定义客户端的监听窗口。
	2,创建服务器端的DategramSocket,创建时定义服务器端的监听窗口。
	3.在服务器端定义DategramSocket对象,封装待发送的数据包。
	4,客户端将数据包发送出去。
	5,服务器端接收数据包。

4,传递基本数据类型
	通过字节数组流
	ByteArrayInputStream,ByteArrayOutputStream,
	与数据流
	DateInputStream.DateOutputStream 
	联合使用可以传递基本数据类型。

5,传递对象
	通过字节数组流
	ByteArrayInputStream,ByteArrayOutputStream,
	与对象流
	ObjectInputStream,ObjectOutputStream ,
	联合使用可以创建对象。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值