iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >什么是网络编程?Java如何实现?三次握手和四次挥手?
  • 853
分享到

什么是网络编程?Java如何实现?三次握手和四次挥手?

网络java开发语言 2023-10-25 08:10:47 853人浏览 独家记忆
摘要

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Java

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

Java网络编程


什么是网络编程?Java如何实现?三次握手和四次挥手?


1. 什么是网络编程

网络编程

  • 网络编程,就是指在网络通信协议下,不同计算机运行的程序,进行的数据传输,即:计算机与计算机之间,通过网络进行数据传输。

    • Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

常见的软件架构

  • C/S架构:Client/Server – 客户端/服务器,在用户本地需要下载并安装客户端程序,在远程有一个服务器程序。
  • B/S架构:Browser/Server – 浏览器/服务器,只需要一个浏览器,用户通过不同的网址,访问不同的服务器。
    • BS架构 优缺点:
      • ①不需要开发客户端,只需要页面 + 服务端
      • ②用户不需要下载,打开浏览器就能使用
      • ③如果应用过大,用户体验受到影响(缺)
    • CS架构 优缺点:
      • ①画面可以做的十分精美,用户体验好
      • ②需要开发客户端,也需要开发服务端(缺)
      • ③用户需要下载和更新,麻烦(缺)



2. 网络编程三要素

网络编程三要素

  • IP:设备在网络中的地址,是唯一的标识。
  • 端口号:应用程序在设备中唯一的标识。
  • 协议:数据在网络中传输的规则,常见:UDP、tcpHttphttps、ftp。

IP

  • IP全称:Internet Protocol,互联网协议地址,也称IP地址,是分配给网上设备的数字标签。

  • IPv4:Internet Protocol version 4,互联网通信协议第四版。

    • 采用32位地址长度,分成四组,每组范围0~255。
    • 最多有2^32个ip,目前已用完。
    • 192.168.开头是私有地址,范围在192.168.0.0 – 192.168.255.255,专供组织机构内部局域网使用。
    • 在这里插入图片描述
  • IPv6: Internet Protocol version 6,互联网通信协议第六版。

    • 采用128位地址长度,分为8组。
    • 最多有2^128个ip,正是为了解决IPv4不够用而出现的。
    • 在这里插入图片描述

端口号

  • 端口号:应用程序在设备中唯一的标识
    • 端口号是由两个字节表示的整数,取值范围:0 ~ 65535,其中0 ~ 1023之间的端口号用于一些知名的网络服务或者应用,平常使用可以使用1024以上的端口号。
    • == 注意:一个端口号只能被一个应用程序使用。 ==

协议

  • 计算机网络中,连接和通信的规则被称为网络通信协议。

  • OSI参考模型:世界互联协议标准,全球通信规范,模型过于理想化,未能在因特网上进行广泛推广。

  • TCP/IP参考模型(TCP/IP协议):事实上的国际标准

    • 在这里插入图片描述


⚪ UDP协议

UDP协议

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议。
    • 速度快,但大小限制一次最多发送64K,数据不安全,数据易丢失。

UDP通信程序

  • 发送数据:

  • ① 创建发送端的DatagramSocket对象

    • 可以通过传入参数,指定绑定的端口。
  • ②数据打包(DatagramPacket)

  • ③发送数据

  • ④释放资源

  • public class UDPSendM {    public static void main(String[] args) throws IOException {        //1. 创建DatagramSocket对象        // 绑定端口:通过绑定的端口向外发送数据        //空参:随机选取所有可用端口中的一个来绑定        //带参:指定端口号进行绑定        DatagramSocket datagramSocket = new DatagramSocket();        //2. 打包数据        String str = "这是使用UDP协议发送的数据";//数据        byte[] bytes = str.getBytes();        //转换成字节数组        InetAddress address = InetAddress.getByName("127.0.0.1"); //向这个主机地址发送数据        int port = 10086; //向这个端口发送数据        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, address, port);        //3. 发送数据        datagramSocket.send(datagramPacket);        //4.关闭资源        datagramSocket.close();    }}
  • 接收数据:

  • ①创建DatagramSocket对象

    • 一定要绑定端口,端口需要与发送程序的目标端口保持一致!
  • ②接受打包好的数据

  • ③解析数据包

  • ④释放资源

  • public class UDPReceiveM {    public static void main(String[] args) throws IOException {        //1. 创建DatagramSocket对象,必须绑定端口号,并与发送程序的目标端口一致        DatagramSocket datagramSocket = new DatagramSocket(10086);        //2. 接收数据        byte[] bytes = new byte[1024];        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);        //receive()是阻塞的,在接收到数据前会一直等待        datagramSocket.receive(datagramPacket);        //3. 解析数据        byte[] data = datagramPacket.getData(); //传输的数据        InetAddress address = datagramPacket.getAddress();//传输的地址        int length = datagramPacket.getLength();//数据长度        int port = datagramPacket.getPort();//传输的端口号        System.out.println("接收到的数据:" + new String(data,0,length));        System.out.println("数据从端口" + port + "地址" + address + "发来");        //4. 释放资源        datagramSocket.close();    }}
  • 输出:

  • 接收到的数据:这是使用UDP协议发送的数据数据从端口50584地址/127.0.0.1发来

UDP的三种通信方式

  • ①单播: 一对一进行数据传输

    • 上述通信程序采用的就是单播方式。
  • ②组播: 一对多进行数据传输

    • 组播地址:224.0.0.0 ~ 239.255.255.255,其中224.0.0.0 ~ 224.0.0.225是预留的组播地址。

    • 发送端: 第一步创建的是MulticastSocket对象,之后打包数据时目标地址改为组播地址,其余与单播一致。

      • MulticastSocket ms = new MulticastSocket();
    • 接收端: 第一步创建的是MulticastSocket对象,之后将当前机器添加绑定到发送端的目标组播地址中去:

      • MulticastSocket ms = new MulticastSocket(10000);//获取组播地址的对象InetAddress address = InetAddress.getByName("224.0.0.1");//MulticastSocket对象添加绑定到组播地址ms.joinGroup(address);
  • ③广播: 向所有机器进行数据传输

    • 广播地址:225.225.225.225
    • 实现广播,只需要在单播的发送端基础上,将目标地址改为广播地址的225.225.225.225。



⚪ TCP协议

TCP协议

  • 传输控制报协议(Transmission Control Protocol)
  • UDP是面向连接通信协议。
    • 虽速度慢,但没有大小限制,且数据安全。

TCP通信程序

  • TCP协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,通信之前要保证连接已经建立,通过Socket产生IO流来进行网络通信。

  • 客户端:

    • ①创建客户端的Socket对象(Socket),与指定服务端连接
      • Socket(String host,int port)
    • ②获取输出流,写数据
      • OutputStream getOutputStream()
    • ③释放资源
    • void close()
  • public class TCPClient {    public static void main(String[] args) throws IOException {        //1. 创建Socket对象,与服务端建立连接        Socket socket = new Socket("127.0.0.1", 10000);        //2. 获取字节输出流        OutputStream outputStream = socket.getOutputStream();        //3. 发送数据        String s = "这边是客户端,你好呀服务端!";        outputStream.write(s.getBytes());        //4. 关闭资源        outputStream.close();        socket.close();    }}
  • 服务端:

  • ①创建服务端的Socket对象(ServerSocket)

    • ServerSocket(int port)
  • ②监听客户端连接,返回一个Socket对象

    • Socket accept()
  • ③获取输入流,读数据,并显示

    • InputStream getInputStream()
  • ④释放资源

    • void close()
  • public class TCPServer {    public static void main(String[] args) throws IOException {        //1. 获取服务端Socket对象,端口号与客户端目标端口号一致        ServerSocket serverSocket = new ServerSocket(10000);        //2. 返回一个Socket对象        Socket accept = serverSocket.accept();        //3. 获取字节输入流        InputStream inputStream = accept.getInputStream();        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);        //4. 获取数据,显示        int i;        System.out.println("接收到数据:");        while((i = inputStreamReader.read()) != -1){            System.out.print((char)i);        }        //5. 释放资源        inputStreamReader.close();        accept.close();        serverSocket.close();    }}

· 三次握手和四次挥手

三次握手(确保连接建立)

  • ①客户端首先会向服务器发送连接请求,之后开始等待,等待服务器确认。
  • ②服务器接收到请求后,向客户端返回一个响应,告诉客户端收到请求了。
  • ③得到服务器确认后,再次向服务器发送确认信息,建立连接。

四次挥手(确保连接断开,且数据处理完毕)

  • ①客户端首先向服务器发送取消连接的请求,而后等待响应。
  • ②服务器向客户端返回一个响应,表示收到了取消连接的请求,之后服务器开始处理数据。
  • ③服务器将数据处理完毕后,再次向客户端发出确认取消信息。
  • ④客户端再次发送确认消息,连接取消。



3. InetAddress类

InetAddress类的使用

  • static InetAddress getByName(String host):获取主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址。

    • 在这里插入图片描述

  • String getHostName():获取此IP地址的主机名。

  • String getHostAddress():返回文本显示中的IP地址字符串

  • public class InetAddressDemo {    public static void main(String[] args) throws UnknownHostException {        //1. 获取InetAddress对象(一台设备的对象),传入的可以是IP地址,也可以是机器名称        InetAddress inetAddress = InetAddress.getByName("LAPTOP-TB1IVJR9");        System.out.println(inetAddress); // LAPTOP-TB1IVJR9/192.168.88.1        InetAddress inetAddress2 = InetAddress.getByName("192.168.88.1");        System.out.println(inetAddress2); // /192.168.88.1        //2. 获取InetAddress对象的设备名称        String hostName = inetAddress.getHostName();        System.out.println(hostName); // LAPTOP-TB1IVJR9        //3. 获取InetAddress对象的ip地址字符串        String hostAddress = inetAddress.getHostAddress();        System.out.println(hostAddress); // 192.168.88.1    }}



在这里插入图片描述

来源地址:https://blog.csdn.net/ebb29bbe/article/details/133975878

--结束END--

本文标题: 什么是网络编程?Java如何实现?三次握手和四次挥手?

本文链接: https://www.lsjlt.com/news/442158.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是网络编程?Java如何实现?三次握手和四次挥手?
    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Java...
    99+
    2023-10-25
    网络 java 开发语言
  • TCP的三次握手与四次挥手是什么
    这篇文章主要介绍了TCP的三次握手与四次挥手是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TCP的三次握手与四次挥手是什么文章都会有所收获,下面我们一起来看看吧。TCP报文段的首部格式**序列号seq:*...
    99+
    2023-06-27
  • 如何使用tcpdump分析三次握手四次挥手
    这篇文章主要介绍了如何使用tcpdump分析三次握手四次挥手,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发...
    99+
    2023-06-27
  • 如何解析TCP的三次握手与四次挥手
    这篇文章将为大家详细讲解有关如何解析TCP的三次握手与四次挥手,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。TCP的传输如图:TCP三次握手的过程如下:建立TCP连接,就是指建立一个TCP连...
    99+
    2023-06-28
  • Python中TCP协议的三次握手与四次挥手是什么
    本篇内容介绍了“Python中TCP协议的三次握手与四次挥手是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、TCP、UDP 协议的区...
    99+
    2023-06-02
  • TCP为什么是三次握手和四次挥手以及可能出现的问题
    目录 TCP为啥设定为三次握手(两个角度分析)不可靠产生无效链接浪费服务器资源 TCP为啥四次挥手服务端有剩余数据需要发送--四次挥手(多数情况)服务端无剩余数据发送--捎带应答--四次...
    99+
    2023-08-31
    tcp/ip 网络 服务器
  • 计算机网络传输协议TCP三次握手与四次挥手原理
    目录TCP三次握手四次挥手服务器状态转换客户端状态转换TCP状态转换图TCP中常见的面试题为什么是三次握手,不是一次或者两次为什么是三次握手,四次挥手如果已经建立了连接,但是客户端突...
    99+
    2024-04-02
  • 【PHP面试题12】TCP协议三次握手和四次挥手分别是什么
    文章目录 一、概览二、三次握手2.1 第一步:客户端向服务端发送 SYN(同步)包2.2 第二步:服务端返回 ACK(确认)包和 SYN 包2.3 第三步:客户端返回 ACK(确认)包 三...
    99+
    2023-09-25
    http php java 三次握手 四次挥手
  • 什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
    文章目录 前言我们为什么要使用线程而不是进程来实现并发编程什么是线程进程和线程的区别如何使用Java实现多线程创建线程1.创建一个继承 Thread 类的线程类2.实现 Runnable 接口匿名内部类方式实现 Runnable ...
    99+
    2023-08-19
    java JavaEE 多线程 进程
  • 什么是ASP编程算法?如何实现同步和并发处理?
    ASP编程算法是一种常见的Web编程技术,它允许开发人员通过使用服务端脚本语言来创建动态Web页面。ASP编程算法的核心原理是将客户端请求发送到服务器,服务器使用脚本语言生成HTML内容,并将其发送回客户端。 在ASP编程中,同步和并发处理...
    99+
    2023-07-07
    同步 并发 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作