我的学习之路_第十三章_网络协议

来源:互联网 发布:医药大数据 编辑:程序博客网 时间:2024/06/07 01:51
【Inteaddress类】


java.net.Inetaddress类:此类表示互联网协议(IP)地址.




静态方法:


返回值:Inetaddress getLocalHost() 返回本地主机(自己使用的电脑)
UnknownHostException:未知主机异常

返回值:InetaddressgetByName(String host) 在给定主机名的情况下确定主机的 IP 地址.
参数: String host   
也可以是电脑主机的名称,也可以是电脑的ip地址,还可以是域名,网址(www.baidu.com)


非静态方法:


返回值:String  getHostAddress()   返回 IP 地址字符串(以文本表示形式).
返回值:String  getHostName()     获取此 IP 地址的主机名


【UDP通信的发送端】:把数据进行包装,根据接受端的IP地址和端口发送数据报包


和UDP相关的类:
java.net.DatagramPacket: 此类表示数据报包
作用:把数据和接受端的IP地址,端口号进行包装


java.net.DatagramSocket: 此类表示用来发送和接受数据报包的套接字
作用:发送数据报包,接收数据报包.
套接字:绑定IP地址和端口号的网络对象


构造方法:


DatagramPacket(byte[] buf , int length , InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号.


DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口.


成员方法:


void send(DatagramPacket  p) 从此套接字发送数据报包.


实现步骤:


1.创建DatagramPacket对象,封装数据和接收端的IP地址,端口号(创建集装箱)
2.创建DatagramSocket对象(创建码头)
3.使用DatagramSocket中的方法 send 发送数据报包
4.释放资源


▲ UDP通信是面向无连接: 不用关是否有接收端,都可以发送数据,没有接收端会发生数据丢失




【UDP通信的接收端】 : 接收发送端发送的数据报,拆包


和UDP相关的类:


java.net.DatagramPacket: 此类表示数据报包
作用:是用数据报包,接收发送端的数据


java.net.DatagramSocket: 此类表示用来发送和接收数据报包的套接字
作用:发送数据报包,接收数据报包
套接字:绑定IP地址和端口号的网络对象


构造方法:

DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包.
DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口


成员方法:


没有返回值 receive(DatagramPacket p ) 从此套接字接收数据报包


实现步骤:


1.创建DatagramPacket对象,接收发送端的数据报
2.创建DatagramSocket对象,并且和系统要指定的端口号
3.使用DatagramSocket中的方法 receive 发送端接收数据报包
4.拆包
DatagramPacket有和数据报包相关的方法
返回值:int getLength() 获取发送端数据的长度
返回值:InetAddressgetAddress()    获取发送端的IP地址对象
返回值:int getPort() 获取发送端的端口号(系统随机分配的)
5.释放资源 

【TCP通信的客户端】: 向服务器发送请求连接,接受服务器回写的数据


表示客户端的类:  Socket
java.net.Socket: 此类实现客户端套接字 (也可以就叫"套接字").


构造方法:


Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.
Socket(String host, int port)  创建一个流套接字并将其连接到指定主机上的指定端口号.


成员方法:

返回值:OutputStreamgetOutputStream() 返回此套接字的输出流
返回值:InputStreamgetInputStream()  返回此套接字的输入流


注意:客户端和服务器进行数据交互,不能使用自己创建的流对象,必须使用Socket中提供的流


实现步骤:


1.创建刻度端Socket对象,绑定服务器的IP地址和端口号
2.使用Socket中的方法getOutputStream获取网络输出流
3.使用OutputStream网络流中的方法writer给服务器发送数据
4.使用Socket中的方法getInputStream获取网络输入流
5.使用InputStream网络流中的方法read读取服务器会写的数据
6.释放资源


★注意: TCP是面向连接通信,必须先启动服务器,在启动客户端,如果服务器没有启动
则会抛出ConnectException: Connection refused: connect 异常




【TCP通信的服务器端】 : 接受客户端的发送的数据,给客户端回写数据


表示服务器的类: ServerSocket
java.nett.ServerSocket: 此类实现服务器套接字


构造方法:
ServerSocket(int port) 创建绑定到特定端口的服务器套接字


◆有一件特别重要的事情: 服务器必须知道是哪个客户端请求的服务器
  所以可以使用accept方法获取请求的客户端




成员方法:


返回值: Socket accept() 侦听并接收到此套接字的连接


实现步骤:


1.创建ServerSocket对象,和系统要指定的端口号
2.使用ServerSocket中的方法accept获取请求的客户端对象
3.使用Socket中的方法getInputStream获取网络输入流
4.使用InputStream网络流中的方法read读取客户端发送的数据
5.使用Socket中的getOutputStream获取网络输出流
6.使用OutputStream网络流中的方法writer给客户端回写数据
7.释放资源(ServerSocket,Socket)




【文件上传案例的客户端】


数据源:某一个文件
数据目的:服务器


实现步骤:


1.创建一个本地字节输入对象,绑定数据源
2.创建客户端Socket对象,绑定服务器的IP地址和端口号
3.使用Socket中的方法getOutputStream()获取网络输出流对象
4.使用本地字节输入对象中的read读取文件
5.使用网络输出流对象中的方法write把文件写入到服务器
这里写入是获取不到-1的,所以必须使用Socket中的方法shutdownOutput给服务器写一个终止序列

6.使用Socket中的方法getInputStream()获取网络输入流对象
7.使用网络输入流对象中的方法read读取服务器会写信息
8.释放资源(本地字节输入对象,Socket)

★注意:服务器的客户端之间的交互,必须使用Socket提供的网络流
客户端或者服务器读取/保存本地的文件,使用自己创建的流




【文件上传案例的服务器端】


数据源:客户端
数据目的:把接收的文件存入的地方


实现步骤:

1.创建一个File对象,绑定要保存的文件的目录
2.判断文件夹是否存在,不存在的话就创建
3.创建服务器端ServerSocket,绑定端口号
4.使用ServerSocket中的方法accept获取客户端Socket
5.使用Socket中的方法getInputStream()获取网络输入流对象
6.创建本地字节输出流对象,绑定目的地
7.使用网络输入流对象中的read读取客户端上传的文件
自定义文件的命名规则
公司域名+毫秒值+随机数
8.使用本地字节输出流对象中的方法writer,把文件写入到服务器硬盘上
9.使用Socket中的方法getOutputStream()获取网络输出流对象
10.使用网络输出流对象中的write给客户端回写数据
11.释放资源(本地字节输出流对象,Socket,ServerSocket)
原创粉丝点击