java网络编程


  1. 网络通信协议

    OSI参考模型TCP/IP参考模型TCP/IP参考模型各层对应协议
    应用层应用层HTTP、ftp、telnet、DNS…
    表示层应用层
    会话层应用层
    传输层传输层TCP、UDP、…
    网络层网络层IP、ICMP、ARP…
    数据链路层数据链路层Link
    物理层物理
  2. 协议

    ** **TCPUDP
    是否连接面向连接面向非连接
    传输可靠性可靠不可靠
    速度
  3. tcp

    //服务器
    ServerSocket server = new ServerSocket(9999);
    //获取监听:监听是否有客户端的通讯要求接入
    while(true){
        Socket socket = null;
        try {
            socket = server.accept();//每次循环结束后,都会获取新的监听
            //接收
            DataInputStream in = new DataInputStream(socket.getInputStream());
            String msg = in.readUTF();
            System.out.println("服务器接收:"+msg);
            //发送
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            System.out.print("请输入:");
            out.writeUTF(scanner.nextLine());
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(socket != null){
                socket.close();
            }
        }
    }
    
    Scanner scanner = new Scanner(System.in);
    while(true){
        //客户端
        Socket socket = null;
        try {
            //发送
            socket = new Socket(InetAddress.getByName("localhost").getHostAddress(), 9999);
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            System.out.print("请输入:");
            out.writeUTF(scanner.nextLine());
            //接收
            DataInputStream in = new DataInputStream(socket.getInputStream());
            String msg = in.readUTF();
            System.out.println("客户端接收:"+msg);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    1. TCP标志位:

      示例说明
      SYNsynchronous建立联机
      ACKacknowledgement确认
      PSHpush传送
      FINfinish结束
      RSTreset重置
      URGurgent紧急
      Sequence number顺序号码
      Acknowledge number确认号码
    2. TCP三次握手:

      1. 客户端向服务器发送一次请求:SYN,seq number
      2. 服务器接收到客户端的连接请求后,会再次向客户端发起一次请求
      3. 客户端接收到服务器确认连接的请求后,会再次响应服务器一个确认连接

      image-20210507220447311

    3. TCP四次挥手:

      1. 客户端通知服务器,我的数据传完了,我要关闭连接
      2. 服务器响应,确认关闭连接,
      3. 向客户端发送关闭连接的请求
      4. 客户端响应,确认关闭连接

      image-20210507232317378

  4. udp: 是一种发送后没有响应的一种请求。可用于心跳检测

    特点

    1. 无需响应
    2. 对数据安全要求不高
    3. 传送效率高
    4. 占用资源少
    //发送udp数据
    //创建DatagramSocket对象,绑定端口3456
    DatagramSocket sendSocket = new DatagramSocket(3456);
    //准备好要发送的数据,类型为byte[]
    String string = "Hello,I come form ICSS!";
    byte[] databyte = new byte[100];
    databyte = string.getBytes();
    //创建数据报,封装了要发送的数据,数据长度,服务器地址,以及服务器端口为5000
    DatagramPacket sendPacket = new DatagramPacket(databyte,
    string.length(), InetAddress.getByName("127.0.0.1"), 5000);
    //使用DatagramSocket对象将数据报sendPacket发送到服务器
    sendSocket.send(sendPacket);
    System.out.println("发送数据:" + string);
    
    
    //接收udp数据
    //创建DatagramSocket对象,用来接收数据,端口为5000
    DatagramSocket receiveSocket = new DatagramSocket(5000);
    byte buf[] = new byte[1000];
    DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
    System.out.println("startinig to receive packet");
    while (true) {
        //使用DatagramSocket接收数据报
        receiveSocket.receive(receivePacket);
        //解析数据报中的信息,获得主机名及端口、数据等
        String name = receivePacket.getAddress().toString();
        System.out.println("来自主机:" + name + "端口:"+ receivePacket.getPort());
        String s = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("接收数据: " + s);
    }
    
    

相关