day13_网络编程

32 阅读3分钟

day13_网络编程

1. 网络通信

基本的通信架构

  • CS架构(Client客户端/Server服务端)
  • BS架构(Browser浏览器/Server服务端)

网络通信三要素

  • IP地址:计算机在网络上的唯一标识
    • 因特网上的每台计算机和其它设备都规定了一个唯一的地址
    • IP地址有两种形式:IPv4、IPv6
  • 端口号:应用程序在设备中唯一的标识
    • 标记正在计算机设备上运行的应用程序的,被规定为一个 16 位的二进制,范围是 0~65535
      • 周知端口:0~1023,被预先定义的知名应用占用
      • 注册端口:1024~49151,分配给用户进程或某些应用程序
      • 动态端口:49152到65535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配
  • 协议:连接和数据在网络中传输的规则
    • 网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议
    • 传输层的两个通信协议
      • UDP:用户数据报协议
      • TCP:传输控制协议

2. UDP通信

UDP特点

  • 无连接、不可靠通信
  • 不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了
  • Java提供了一个java.net.DatagramSocket类来实现UDP通信

DatagramSocket:用于创建客户端、服务端

构造器说明
public DatagramSocket()创建客户端的Socket对象, 系统会随机分配一个端口号。
public DatagramSocket(int port)创建服务端的Socket对象, 并指定端口号
方法说明
public void send(DatagramPacket dp)发送数据包
public void receive(DatagramPacket p)使用数据包接收数据

DatagramPacket:创建数据包

构造器说明
public DatagramPacket(byte[] buf, int length, InetAddress address, int port)创建发出去的数据包对象
public DatagramPacket(byte[] buf, int length)创建用来接收数据的数据包
方法说明
public int getLength()获取数据包,实际接收到的字节个数

InetAddress:代表IP地址

名称说明
public static InetAddress getLocalHost()获取本机IP,会以一个inetAddress的对象返回
public static InetAddress getByName(String host)根据IP地址或者域名,返回一个inetAdress对象
public String getHostName()获取该IP地址对象对应的主机名。
public String getHostAddress()获取该IP地址对象中的IP地址信息。
public boolean isReachable(int timeout)在指定毫秒内,判断主机与该IP对应的主机是否能连通

3. TCP通信

TCP特点

  • 面向连接、可靠通信
  • 通信双方事先会采用“三次握手”方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端
  • Java提供了一个java.net.Socket类来实现TCP通信

Socket:客户端开发

构造器说明
public Socket(String host , int port)根据指定的服务器IP、端口号请求与服务端建立连接,连接通过,就获得了客户端socket
方法说明
public OutputStream getOutputStream()获得字节输出流对象
public InputStream getInputStream()获得字节输入流对象

ServerSocket:服务端开发

构造器说明
public ServerSocket(int port)为服务端程序注册端口
方法说明
public Socket accept()阻塞等待客户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象。