JavaSE基础-网络编程

190 阅读2分钟

一、网络编程三要素

1. 网络通信协议

  1. 物理层/数据链路层
  2. 网络层
  3. 传输层(TCP/IP、UDP、...协议)
  4. 应用层(HTTP、ftp、...协议)

2. IP地址

Ipv4 : 4个字节

Ipv6 :16个字节

3. 端口号

2个字节组成

范围在0-65535之间

Tips:

  • 1024之前的端口号不能使用,已经被系统分配给已知的网络软件了
  • 80端口 网络端口 www.baidu.com:80
  • 数据库 MySql : 3306
  • 数据库 Oracle : 1521
  • Tomcat服务器 :8080

二、TCP通信协议

1. 概述

TCP通信是面向连接的通信,客户端和服务器端必须经过3次握手,建立逻辑连接,才能通信(安全)

2. 步骤

  1. 服务器端启动
  2. 客户端请求
  3. 建立一个连接,其中包含IO对象
  4. 客户端和服务器端可以使用这个IO对象进行通信
  5. 通信数据不仅仅是字符,因此IO对象是字节流对象

3. 表示

服务器端:ServerSocket类

客户端:Socket类

4. 图解

5. 套接字

java.net.Socket 此类实现客户端套接字(也称为套接字),套接字是两台机器间通信的端点

套接字: 包含了IP地址端口号网络单位

6.代码实现

1). 客户端实现

public static void main(String[] args) throws IOException{
    //1.创建套接字对象,参数为服务器的名称或IP地址和服务器对应的端口号
    Socket socket = new Socket("127.0.0.1",8888);
    
    //2.获取套接字的输出流对象
    OutputStream outputStream = socket.getOutputStream();
    
    //3.使用输出流对象,给服务器发送数据
    outputStream.write("你好服务器);
    
    //4.读取服务器回写的数据
    InputStream inputStream = socket.getInputStream();
    byte[] bytes = new byte[1024];
    int len = inputStream.read(bytes);
    System.out.println(new String(bytes,0,len));
    
    //5.释放资源
    socket.close();
}

2). 服务器端实现

public class TCPServer{
    public static void main(String[] args) throws IOException{
        //1.创建指定端口号的服务器套接字
        ServerSocket severSocket = new ServerSocket(8888);
        
        //2. 使用服务器套接字的accept()方法,获取请求的客户端对象
        Socket socket = serverSocket.accept();
        
        //3. 使用获取到的客户端对象的getInputStream()方法获取字节输入流
        InputStream inputStream = socket.getInputStream();
        
        //4. 读取客户端发送的数据
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes,0,len));
        
        //5. 给客户端回写数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("收到谢谢".getBytes());
        
        //6. 释放资源
        socket.close();
        serverSocket.close();
    }
}

三、模拟B/S服务器分析

1. 图解