首页 > 编程语言 >Java中网络编程的学习

Java中网络编程的学习

时间:2024-10-16 19:10:35浏览次数:8  
标签:协议 Java Socket IP 编程 网络 TCP 计算机网络

Java 网络编程学习总结

本章目标

  • 了解计算机网络基础知识
  • 了解 OSI 七层参考模型
  • 熟悉 TCP/IP 协议
  • 熟悉常见网络协议
  • 掌握 socket 套接字编程

计算机网络

什么是计算机网络

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。

什么是网络编程

网络编程就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java 语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。

什么是网络协议

如同人与人之间相互交流是需要彼此能够理解的语言,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。

什么是网络体系结构

计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现。

OSI 七层参考模型

  • 应用层:应用层为OSI的最高层,是直接为应用进程提供服务的。
  • 表示层:表示层功能是把应用层提供的信息变换为能够共同理解的形式
  • 会话层:会话层的主要功能是负责应用程序之间建立、维持和中断会话
  • 传输层:传输层起着承上启下的作用,涉及源端节点到目的端节点之间可靠的信息传输
  • 网络层:网络层涉及源主机节点到目的主机节点之间可靠的网络传输
  • 数据链路层:数据链路层的功能是实现计算机网络中相邻节点之间的可靠传输
  • 物理层:数据链路层的功能是实现计算机网络中相邻节点之间的可靠传输

TCP/IP 四层协议

TCP/IP参考模型采用 4 层的层级结构,每一层都调用它的下一层所提供的协议来完成自己的需求

  • 应用层:应用层为 Internet 中的各种网络应用提供服务
  • 传输层:传输层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中
  • 网络层:网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机
  • 网络接口层:TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着OSI参考模型的物理层和数据链路层

TCP/IP 协议族

image-20210803110246364

TCP/IP 协议关系

image-20210803110308915

  • 上层协议依赖下层协议提供的支持与服务
  • 不同协议提供不同的服务以满足不同的网络需求

常见网络协议

IP 协议

IP 协议的作用在于把计算机网络中各种设备终端的数据包准备无误的传递给对方

  • IP 地址:IP 地址也叫逻辑地址或动态,由网络层路由器为计算机网络上的每一台主机分配的 32 位数字组成的地址,该地址可以动态修改,如 192.168.229.11
  • MAC 地址:MAC 地址也叫物理地址或硬件地址,由 48 比特长的 16 进制数字组成,由设备厂家分配全球唯一且不能修改,如 44-45-53-54-00-00
TCP 协议

TCP(传输控制协议)是面向连接的协议,它的作用是为不同主机的应用层之间建立可靠的、像管道一样的连接,以确保不同主机之间能够相互通信

TCP 的三次握手与四次挥手

image-20210803110454430

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据

  • 第一次握手(客户端发送请求):客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。
  • 第二次握手(服务端回传确认):服务器收到客户端连接请求报文,如果同意建立连接,向客户机发回确认报文段(ACK)应答,并为该TCP连接分配TCP缓存和变量。
  • 第三次握手(客户端回传确认):客户机收到服务器的确认报文段后,向服务器给出确认报文段(ACK),并且也要给该连接分配缓存和变量。此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
UDP 协议

UDP(用户数据报协议),它是 TCP/IP 协议簇中无连接的传输层协议,提供快速但不一定可靠的传输服务

image-20210803110622021

UDP协议由两部分组成:首部和数据。首部仅有8个字节,包括源端口和目的端口、长度(UDP用于数据报的长度)、校验和

HTTP 协议

HTTP(超文本传输协议),是一种为分布式、合作式、多媒体信息系统服务,面向应用层的协议,是 Internet 上目前使用最广泛的应用层协议,它基于传输层的 TCP 协议进行通信,HTTP 协议是通用的、无状态的协议。

image-20210803110719558

Socket 编程

Socket 套接字

Socket 套接字,实际上是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Socket,我们才能使用 TCP/IP 协议。

  • Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元
  • TCP/IP 只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口(支持 TCP 或者 UDP 编程接口)
  • Java 网络编程主要涉及到的内容是 Socket 套接字编程
网络通信五要素

image-20210803110904049

Socket 通信模型

Socket 编程 = Socket 客户端编程(Client) + Socket 服务器端编程(Server)

image-20210803110949122

Socket 客户端编程
  • 步骤一:创建 Socket 套接字实例(绑定服务器端 IP 地址和端口号)

    Socket socket = new Socket(“127.0.0.1”, 9999 );
    
  • 步骤二:创建网络输入/输出流

    InputStream inputStream    = socket.getInputStream();
    OutputSteam outputStream = socket.getOutputStream()
    
  • 步骤三:关闭 Socket 连接

    socket.close();
    
Socket 服务器端编程
  • 步骤一:创建 ServerSocket 套接字实例(绑定监听端口号)

    ServerSocket serverSocket = new ServerSocket( 9999 );
    
  • 步骤二:监听来自客户端的网络连接

    Socket socket = serverSocket.accept();
    
  • 步骤三:创建网络输入/输出流

    InputStream inputStream    = serverSocket.getInputStream();
    OutputSteam outputStream = serverSocket.getOutputStream()
    
  • 步骤四:关闭 Socket 连接 和 ServerSocket 连接

    socket.close();
    serverSocket.close();
    

标签:协议,Java,Socket,IP,编程,网络,TCP,计算机网络
From: https://www.cnblogs.com/BingBing-8888/p/18470580

相关文章

  • Java 初学 day12
    java12集合1、Collection到目前位置,我们学习过哪些可以存储元素的容器1、数组优点:不同的数组可以存储不同数据类型的元素缺点:长度不可变2、StringBuffer|StringBuilder优点:长度可以跟随元素的数量而改变缺点:里面的元素只有一种字符数据类型我们今后会......
  • Java基础之源
    目录JDK、JRE和JVM有何区别?Java的跨平台原理是什么?描述一下JVM加载class文件的原理机制?Java有什么核心优势让其成为世界上最流行的编程语言之一?编译和执行Java程序的命令是什么?JDK、JRE和JVM有何区别?JDK包含JRE,比JRE多了开发和调试的工具,比如把Java文件编译成class文......
  • 《深入理解Java异常处理:理论与实践》
    《深入理解Java异常处理:理论与实践》引言在Java编程中,异常处理是一个非常重要的概念。它帮助开发者构建健壮、可靠的程序。本文将详细介绍Java中的异常处理机制,包括异常类的层次结构、如何捕获和处理异常,以及在编程实践中的一些最佳实践。目录异常处理的基本概念Java异常类......
  • Javascript算法——二分查找
    1.数组1.1二分查找1.搜索索引开闭matters!!![left,right]与[left,right)/***@param{number[]}nums*@param{number}target*@return{number}*/varsearch=function(nums,target){letleft=0;letright=nums.length-1;//[left,right],相等时......
  • java基础(6)抽象类和接口
    目录​编辑1.前言2.正文2.1抽象类2.1.1抽象类的概念2.1.2抽象类的语法2.1.3抽象类的特点2.1.4抽象类的作用2.2接口2.2.1接口的概念2.2.2接口的用法2.2.3接口的特点2.2.4实现多个接口2.2.5接口间的继承 2.2.6抽象类和接口的区别3.小结1.前言哈喽大家好吖,......
  • Linux系统编程——进程标识、进程创建
    一、进程标识(pid)  每个进程都有一个非负整数形式的唯一编号,即PID。PID在任何时刻都是唯一的,但是可以重用,当进程终止并被回收以后,其PID就可以为其它进程所用。进程的PID由系统内核根据延迟重用算法生成,以确保新进程的PID不同于最近终止进程的PID。1、特殊的进程标......
  • Java基础语法-运算符
    运算符Java语言支持如下运算符:算术运算符:+,-,,/,%,++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>(了解!!!)条件运算符:?:扩展赋值运算符:+=,-=,*=,/=//二元运算符inta=10;intb=20;intc=25;intd......
  • 前端开发 --JavaScript
    前言html种script主要包括内联script和引用外部JavaScript文件两张方式1.内联script的用法内联script指的是将JavaScript代码直接写在html文档中某个部位<!--内嵌--><script>alert(1)</script><script>windowonload=function(){vara......
  • JAVA入门必备知识点!!你入门了吗?
    目录技术能力考核——答案一、缓存中间件(一)理论部分请简述你熟悉的一种缓存中间件(如Redis)的底层数据结构,并举例说明其在实际应用中的优势。解释缓存穿透、缓存击穿和缓存雪崩的概念,并分别阐述应对这些问题的策略。在分布式系统中,如何保证缓存与数据库的数据一致性?请列......
  • java,awt,中文方框,中文乱码10/16
    今天,在学习图形化界面时,出现中文乱码。经过多种方法,总结1.在IDEA的顶部菜单栏中,选择“Run”(运行)选项。2.在下拉菜单中选择“EditConfigurations”(编辑配置)选项。3.在构建与运行中点修改选项4.添加虚拟机选项5.设置为-Dfile.encoding=gbk在重新运行就可以了。但是一开始,......