• java之网络编程


        网络编程

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

    静态方法:可以获取InetAddress对象
    static InetAddress getLocalHost() 返回本地主机。
    static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
    非静态的方法:
    String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
    String getHostName() 获取此 IP 地址的主机名。

    2. UDP通信的发送端:把数据打包,发送的接收端
    和udp相关的类:
    java.net.DatagramPacket:此类表示数据报包。 用来封装数据
    java.net.DatagramSocket:此类表示用来发送和接收数据报包的套接字。
    套接字:封装了ip地址和端口号的网络对象

    构造方法:
    DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
    DatagramSocket()
    构造数据报套接字并将其绑定到本地主机上任何可用的端口。
    DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。

    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) 创建数据报套接字并将其绑定到本地主机上的指定端口。

    DatagramSocket的成员方法:
    void receive(DatagramPacket p) 从此套接字接收数据报包。

    实现步骤:
    1.创建DatagramPacket对象,封装字节数组,用来接收发送端的数据
    2.创建DatagramSocket对象,和系统要指定的端口号
    3.调用DatagramSocket对象中的方法receive接收发送端的数据报包
    4.拆包,可以使用DatagramPacket中的方法
    获取到发送端数据的长度
    int getLength() 返回将要发送或接收到的数据的长度。
    获取到发送端的ip地址对象
    InetAddress getAddress()
    获取到发送端的端口号
    int getPort()
    5.释放资源

    3. TCP通信的客户端:和服务器建立连接(3次握手),给服务器发送数据,读取服务器回写的数据
    表示客户端的类:
    java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。

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

    成员方法:
    OutputStream getOutputStream() 返回此套接字的输出流。
    InputStream getInputStream() 返回此套接字的输入流。
    注意:客户端和服务器进行交互,不能使用自己创建的字节流对象,必须使用Socket中提高的网络流对象

    实现步骤:
    1.创建客户端Socket对象,封装服务器的IP地址和端口号(创建对象的过程,就是客户端和服务经过3次握手建立连接的过程)
    2.使用Socket中的方法getOutputStream,获取网络字节输出流对象
    3.使用OutputStream网络字节输出流中的方法write往服务发送数据
    4.使用Socket中的方法getInputStream,获取网络字节输入流对象
    5.使用InputStream网络字节输入流对象中的方法read,读取服务器回写的数据
    6.释放资源(Socket)

    TCP通信是面向连接的通信,必须先启动服务器,客户端才能和服务器经过3次握手建立连接
    否则会抛出连接的异常:ConnectException: Connection refused: connect

    TCP通信的服务器端:和客户端通过3次握手,建立连接;接收客户端发送的数据,给客户端回写数据
    表示服务器的类:
    java.net.ServerSocket:此类实现服务器套接字。

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

    服务器有一件特别重要的事情,必须的明确是哪个客户端连接的服务器
    可以使用accept方法获取,请求的客户端对象
    成员方法:
    Socket accept() 侦听并接受到此套接字的连接。

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

  • 相关阅读:
    flask 安装及基础学习(url_for反转,静态文件引入)
    collections 模块之Counter
    collections 数据结构模块namedtuple
    docker 私有仓库之Harbor搭建与使用
    ansible Api 2.3-2.4
    Ansible Callback
    saltstack returners
    快速入门Http协议
    小兔JS教程(五) 简单易懂的JSON入门
    小兔JS教程(四)-- 彻底攻略JS数组
  • 原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8343327.html
Copyright © 2020-2023  润新知