zoukankan      html  css  js  c++  java
  • 我的学习之路_第十三章_网络协议

    【Inteaddress类】

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


    静态方法:

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

    返回值:Inetaddress getByName(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() 获取发送端数据的长度
    返回值:InetAddress getAddress() 获取发送端的IP地址对象
    返回值:int getPort() 获取发送端的端口号(系统随机分配的)
    5.释放资源

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

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

    构造方法:

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

    成员方法:

    返回值:OutputStream getOutputStream() 返回此套接字的输出流
    返回值:InputStream getInputStream() 返回此套接字的输入流

    注意:客户端和服务器进行数据交互,不能使用自己创建的流对象,必须使用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)

  • 相关阅读:
    动车上的书摘-java对象流与序列化
    动车上的书摘-java网络 连接服务器
    HP-Socket v3.2.2
    古典音乐 (java基础 继承)
    编写高质量代码改善java程序的151个建议——[52-57]String !about String How to use them?
    项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化
    HP-JavaUtil: xls 操作类
    [ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
    [ Talk is Cheap Show me the CODE ] : jQuery Mobile页面布局
    20140622
  • 原文地址:https://www.cnblogs.com/jia-/p/7056677.html
Copyright © 2011-2022 走看看