网络编程(JAVA)

前言:Java 是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。

Java 提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在
Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的
网络库, 程序员面对的是一个统一的网络编程环境
 

1.网络编程概述

计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成
一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共
享硬件、软件、数据信息等资源

网络编程的目的:直接或间接的通过网络协议与其他计算机实现数据交互,进行通讯

网络编程的三个问题:

- 问题1:如何精准的定位到每台电脑

- 问题2:如何精准的定位到主机上特定的应用(进程)

-问题3:找到主机后,如何进行可靠的数据传输

2.要素1:IP地址

使用具体的ip地址对应具体的一个互联网上的主机

IP分类:

  角度一:IPv4(4个字节),IPv6(16个字节)

 角度二:共有地址(万维网),私有地址(局域网)

IP地址对应指定的域名

 

   -使用InetAddress来表示域名或者ip地址:

     实洌化:getByName(String host),getLocalHost()

     方法:

3.要素2:端口号

  -用于区分主机上不同的进程

-----对应主机上的进程或应用,每个进程都有一个端口号

(注:只有运行的的才会叫做进程,或者就是一个程序)

端口号是特定的,但是可以给进程设置端口号,因为端口号冲突(冲突是指两个端口号相同的进程同时运行才会冲突,只运行一台时不会影响的)程序是无法运行的。

范围:

4.要素3:网络通信协议

这里有两套参考模型
• OSI 参考模型:模型过于理想化,未能在因特网上进行广泛推广
• TCP/IP 参考模型(或 TCP/IP 协议):事实上的国际标准。
 --涉及到两种传输协议:TCO与UDP协议

TCP:可靠的协议,因为传输时需要双方建立连接(三次握手,四次挥手),然后才能进行大量的数据传输,效率低

涉及到的应用进程:客户端和服务端

TCP案列:打电话

UDP:不可靠的协议(又叫数据包或者数据报协议),不需要对方确认建立连接就可以发送信息

使用数据报传输(限制在64k以内)在进行网络编程客户端发送时是不需要指定端口号和ip地址的,但是需要在数据包里面指定(DatapramPacket类中)

涉及到的应用进程:接收端和发送端

UDP案列:发送短信,发电报

三次握手

第一次挥手:客户端向服务端发送TCP连接的请求

第二次挥手:服务端向客户端发送TCP连接请求的确认

第三次挥手:客户端向服务端发送TCP连接请求确认的确认

四次挥手

第一次挥手:客户端向服务器发送结束连接,让服务器做最后的准备工作。

此时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数据

第二次挥手:服务器接受到客户端释放连接的请求后,会将最后的数据发送给客户端,并告知上层应用进程不再接受数据

第三次挥手:服务器发送完数据后,会给客户端发送一个释放连接的报文。那么客户端接受后就直到可以正式释放连接了

第四次握手:客户端接收到服务器最后释放连接的报文后,要回复一个彻底断开的报文。

这样服务器收到后才会彻底释放连接。这里客户端,发送最后的报文后,会等待2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没有收到,就会再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发送最后的报文,并重新计时,如果等待2SML后没有收到,那么彻底断开。

5.TCP网络编程

    

6.UDP网络编程

7.URL编程

  JAVA后台:将写好的Java程序部署在Tomact服务器上。启动Tomact服务器。

  前台:使用浏览器进行访问,需要URL。(HTML+CSS+JS)

  URL作用:定位互联网上某一资源的地址

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

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

相关文章

Git 突破 文件尺寸限制

前言 当Git本地存储里右超过50MB,却又确实需要上传的时候,就需要用到了不是 解决 本代码就是把大文件进行拆解成小文件,然后上传。 等到拉取下来的时候,可以直接再进行合并,合并成原文件 代码如下,仅供…

AI赋能Oracle DBA:以自然语言与Oracle数据库互动

DBA AI助手:以自然语言与Oracle数据库互动 0. 引言1. AI赋能Oracle DBA的优势2. AI如何与Oracle数据库交互3. 自然语言查询的一些示例4. 未来展望 0. 引言 传统的Oracle数据库管理 (DBA) 依赖于人工操作,包括编写复杂的SQL语句、分析性能指标和解决各种…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 ,每天都有好运相伴。我们一起加油!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. UUID(Universally …

企业文件防泄密软件哪种软件比较好?——推荐@德人合科技 | 天锐绿盾终端数据安全防泄密管理系统!

德人合科技提供的天锐绿盾终端数据安全防泄密管理系统是一款比较好的企业文件防泄密软件。 ——首页———— www.drhchina.com—— 以下是一些关于该软件的优点: 强大的防泄密功能:该软件采用动态加解密技术,能够在文件创建、编辑存盘时自动…

代码随想录算法训练营day24

题目:77. 组合 参考链接:代码随想录 回溯法理论基础 回溯三部曲:回溯函数模板返回值以及参数、回溯函数终止条件、回溯搜索的遍历过程。 模板框架: void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&…

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文:Redis 中文:CRUG网站 redis中文文档 安装包:https://redis.io/download/,选择redis7.0版本即可 Redis在线测试地址(不用下载也…

等保测评与商用密码共铸工控安全“双评合规”新篇章

最近听说了一个段子:“网络安全就像美女的内衣,等保和密评就是最贴身的内衣两件套,上下身一件都不能少。否则你的魔鬼身材(核心数据)就有可能被色狼(黑客)一览无余(数据泄漏&#xf…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装(可选)安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量: Mean: 高斯分布中的μ值(平均值) Sensit: sensitivity,也就是1个Sigma的值; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

力扣 300. 最长递增子序列

题目来源:https://leetcode.cn/problems/longest-increasing-subsequence/description/ C题解1:动态规划 用两个循环,每到一个元素,就找它之前的最长递增子序列。 dp[i]表示第i个元素的最长递增子序列,里层遍历寻找之…

RubyMine 2023:让Ruby编程变得更简单 mac/win版

JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…

使用vuetify实现全局v-alert消息通知

前排提示,本文为引流文,文章内容不全,更多信息前往:oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件(像Element中的ElMessage那样)&#xf…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…

[HackmyVM]靶场 Azer

kali:192.168.56.101 主机发现 arp-scan -l靶机:192.168.56.103 端口扫描 nmap -p- 192.168.56.103 开启了80 3000端口 看一下80端口 一直在那转,看源码也没什么有用的东西 扫一下目录 扫不到什么东西 看看另一个端口 是个登录界面 输入admin/admin测试 错误…

Kafka入门二——SpringBoot连接Kafka示例

实现 1.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

基于springboot+vue的学科平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…

Linux环境基础开发工具使用篇(三) git 与 gdb

一、版本控制器-git 1.简单理解: ①git既是服务端&#xff0c;又是客户端 ②git会记录版本的变化 ③git是一个去中心化的分布式软件 git/gitee 是基于git仓库搭建的网站&#xff0c;让版本管理可视化 2.git 三板斧提交代码 查看安装的git版本 git--version 命令行提交代…

FPGA IO命名与Bank划分

文章目录 IO的命名IO物理命名IO功能命名 Bank简介FPGA器件功能命名与Bank划分查找XILINXIntelLATTICE IO的命名 IO物理命名 FPGA的IO物理命名规则&#xff0c;也就是我们做管脚约束时候的命名。芯片通常是长方体或者正方体&#xff0c;所以命名通常采用字母数字组合的方式&am…

FMM 笔记:st-matching(colab上执行)【官方案例解读】

在colab上运行&#xff0c;所以如何在colab上安装fmm&#xff0c;可见FMM 笔记&#xff1a;在colab上执行FMM-CSDN博客 st-matching见论文笔记&#xff1a;Map-Matching for low-sampling-rate GPS trajectories&#xff08;ST-matching&#xff09;-CSDN博客 0 导入库 from…