Java网络编程,超详细

news2024/11/17 21:31:39

计算机网络分为网络协议和网络体系结构

通过网络发送数据是一项复杂的操作,必须仔细地协调网络的物理特性以及所发送数据的逻辑特征。通过网络将数据从一台主机发送到另外的主机,这个过程是通过计算机网络通信来完成。

网络通信的不同方面被分解为多个层,层与层之间用接口连接。通信的双方具有相同的层次,层次实现的功能由协议数据单元(PDU)来描述。不同系统中的同一层构成对等层,对等层之间通过对等层协议进行通信,理解批次定义好的规则和约定。每一层表示为物理硬件(即线缆和电流)与所传输信息之间的不同抽象层次。在理论上,每一层只与紧挨其上和其下的层对话。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层。

计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现。接口是同一节点内相邻层之间交换信息的连接处,也叫服务访问点(SAP)。


 网络编程从大的方面说就是对信息的发送与接收(如,打电话,发信息),中间传输为物理线路的作用。

网络编程最主要的工作就是在发送端把信息通过规定好的协议进行打包发送,在接收端按照规定好的协议把包进行解析,从而得到发送端的信息,以此达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析等。

网络分层

为了减少网络设计的复杂性,绝大多数网络采用分层设计方法。所谓分层设计方法,就是按照信息的流动过程将网络的整体功能分解为一个个的功能层,不同机器上的同等功能层之间采用相同的协议,同一机器上的相邻功能层之间通过接口进行信息传递。


做网络编程,首先了解一个概念:套接字

什么是套接字?

源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务.

什么是网络编程:

     通过使用套接字来达到进程间通信目的的编程就是网络编程, 进程之间的通信:

       1):在同一台电脑上,A进程和B进程相互通信.

      2):在网络中(外网/内网),A电脑中的aa程序和B电脑中的bb程序相互通信(有网络连接).


网络基础架构

C/S架构

C指代的是Client(客户端),S指代的是Server(服务端),我们用Socket通信的意义就是可以达到服务端可以和客户端通信,反之亦然。

C/S信息传输流程

1、 客户端产生数据,存放在客户端的内存中,然后调用接口将自己内存中的数据发送或者拷贝给本地操作系统内存。

2、客户端操作系统收到数据后,按照客户端指定的协议,调用网卡发送数据

3、网络开始biubiubiu的传输数据

4、服务端调用系统的接口,将数据从操作系统内存拷贝到自己的内存中来

5、服务端操作系统系统收到指令后,使用与客户端相同的规则从网卡读取数据,然后放到服务端内存中给服务端应用使用。


TCP/IP参考模型

TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。

基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层、传输层(主机到主机)、和应用层。

1. 应用层

应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等.

2. 传输层

传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).

TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务.

3. 网际互联层

网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。

IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。

4. 网络接入层(即主机-网络层)

网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。


Java 网络编程实战

 

聊天室功能与原理

1、聊天室的功能

每个客户端在连接到服务器端时,要通过控制台输入自己的名称,然后开始发送消息到服务端,服务端在接收到客户端的连接时,首先输出谁进入了聊天室,然后把客户端发来的消息转发给其他客户端,实现群聊的功能,如果客户端按照约定以@name#开头的格式输入消息,服务端需要解析到客户端要私聊的对象,把消息单独发送给要私聊的客户端。

2、聊天室的原理

聊天室需要一个服务器来支持,多个客户端连接到服务器端,服务器的作用就是接收不同客户端的数据,并转发到其他客户端。

客户端可发发送数据给服务器端,同时客户端也需要接收服务器端返回的数据。客户端的发送数据和接收数据是两个独立的通道,互不影响。即客户端的输出与输入要独立,可以使用多线程来实现。

服务端要为每一个客户端建立一个通道,服务端也使用多线程来实现。

服务端需要创建一个通道的列表,统一管理客户端的通道,为了实现自己发的消息,别人可以看到,不需要返回自己的通道。这样就实现了群聊的功能。也就是自己发一个消息,其他人都可以看到。

在客户端程序里为每一个客户端设置一个名称,约定以@name#开头的格式为私聊,就可以实现私聊的功能。

当程序中发生异常时,线程就停止执行。

聊天室的代码实现

公共关闭资源方法

由于代码里会处理很多 IO 异常,当程序中发生异常时,线程就停止执行,并且关闭掉对应的资源,因此我们定义一个公告的关闭资源的类和方法。

public class Util {  
public static void closeAll(Closeable... io) {    
for (Closeable temp : io) {      
try {        
if (null != temp) {          
temp.close();        
}      
} catch (Exception e) {        
e.printStackTrace();      
}    
}  
}
}

服务端开发

ChatChannel 类,实现服务器端的多线程,维护一个客户端的通道列表,服务器端既能接收客户端的数据,又能把数据转发给对应的客户端。


以上就是今日内容分享,如果你喜欢记得点赞评论哦,你们的支持是我持续分享的动力。

(以上文字及图片整理于网络,如有侵权联系删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爆火的OpenAI及ChatGPT注册详细说明

1 准备条件 ① 需要梯子 ② 准备一个能够接收openai的手机号,用于接收注册验证码 (如果没有也不要紧,下面会介绍通过第三方接码平台来注册) 2 注册手机号接收验证码 网址:https://sms-activate.org/cn/getNumber 2.1 点击右上角注册 这里…

在word表格中一键生成序号,如何操作?

在word表格中一键生成序号,如何操作? 目录 在word表格中一键生成序号,如何操作? 1、首先选中需要填序号的这一列​ 2、在【开始】菜单中找到【多级列表】点击,再点击【定义新的多级列表】​ 3、点击【修改级别中的1…

ELK企业级日志收集

目录 一、ELK简介 二、ELK各组件介绍 ElasticSearch: Kibana: Logstash: 三、ELK可以添加的其他组件 Filebeat: 缓存/消息队列(redis、kafka、RabbitMQ等): Fluentd: 四、为…

【C初阶】第五篇——数组

一维数组的创建和初始化 数组的创建 数组的初始化 一维数组的使用 一维数组在内存中的存储 二维数组的创建和初始化 二维数组的创建 二维数组的初始化 二维数组的使用 二维数组在内存中的存储 数组越界 数组作为函数参数 冒泡排序函数的错误设计 数组名是什么? …

[附源码]Python计算机毕业设计SSM基于的汉服服装租赁系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]Python计算机毕业设计Django大学生志愿者服务管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

配置vue3适用的vue-devtools

1、下载最新的vue/devtools的github项目库 项目库地址为 :GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging Vue.js applications. 2、安装yarn vue/devtools的项目库,必须使用yarn来编译,npm会报错。 npm i 会报…

SQLyog Ultimate最流行的数据库管理工具之一

SQLyog Ultimate最流行的数据库管理工具之一 SQLyog是为Windows提供的最流行的SQL数据库管理工具之一。该软件是世界上任何地方的数据库管理工具,非常快速,易于使用和维护图形环境。使用此程序,您可以构建漂亮的数据,并在可视摄像…

Java教程-特性/语法/对象和类/基本数据类型/变量修饰符运算符/循环结构和条件语句/数组/正则/文件IO/异常处理详细总结

文章目录教程简介主要特性Java 语言是简单的:Java 语言是面向对象的:Java语言是分布式的:Java 语言是健壮的:Java语言是安全的:Java 语言是体系结构中立的:Java 语言是可移植的:Java 语言是解释…

stm32 如何查看系统各个时钟

在主函数main中会通过定义SystemInit()函数中设置的系统时钟大小: SYSCLK(系统时钟) 72MHz AHB 总线时钟(使用 SYSCLK) 72MHz APB1 总线时钟(PCLK1) 36MHz APB2 总线时钟(PCLK2) 72MH…

消息队列---MQ介绍

文章目录前言一、MQ是什么?1.1基本概念1.2MQ的优势和劣势优势应用解耦异步提速削峰填谷劣势二、常见的MQ产品总结前言 实习之MQ学习历程 一、MQ是什么? 1.1基本概念 MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系…

【数据结构】堆排序 (超详细)

前言:      前几次讲了如何构建一个堆以及TopK算法,那么这次给大家分享一下堆排序的两种方法。 方法一 直接暴力解决,建一个小堆,把数组的数据依次push,随后每次Pop堆顶,放进数组里。不过该方法因为建堆有消耗&…

字体图标、平面转换、渐变

1、字体图标 字体图标 字体图标展示的是图标,本质是字体。处理简单的、颜色单一的图片 1.1、字体图标的优点: 灵活性:灵活地修改样式,例如:尺寸、颜色等轻量级:体积小、渲染快、降低服务器请求次数兼容性…

SQL ALTER TABLE 语句

📒博客主页: ​​开心档博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由开心档原创! 📆51CTO首发时间:🌴2022年12月12日🌴 ✉…

华硕编程竞赛11月JAVA专场 J题再见天空 题解

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

回归测试对比确认测试的区别

回归测试和确认测试是软件测试工作流程中的经常会做的两件事情,这两个环节也是代表软件测试的两个分类,那么他们之间的区别是什么?这篇文章咱们分析一下。回归测试与确认测试的区别?确认测试我们先说确认测试,它是软件…

表格解析 概览

表格解析发展至今,仍然是一项很年轻的研究领域,出现了大量解决方案,常用的技术包括:线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派,从中了解这项任务背后所采用的技术。在…

28130-13-4,Val-Val-Val,H2N-VVV-OH

As trileucine, trivaline self-assembles into monolayers on highly ordered pyrolytic graphite (HOPG).三缬氨酸在高度有序的热解石墨(HOPG)上自组装成单层。 编号: 179127中文名称: 三肽Val-Val-Val英文名: Val-Val-ValCAS号: 28130-13-4单字母: H2N-VVV-OH三字母: H2N-Va…

算法:栈和队列的设计

一 用两个栈实现队列 1.1 题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1&a…

1 数据可视化简介

1.1 可视化释义 人眼是一个高带宽的巨量视觉信号输入并行处理器,最高带宽为每秒100MB,具有很强的模式识别能力,对可视符号的感知速度比对数字或文本快多个数量级,且大量的视觉信息的处理发生在潜意识阶段。其中的一个例子是视觉突…