Java网络编程入门

news2024/10/6 20:38:06

1 网络编程入门

1.1 网络编程概述

  • 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及 其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
    在这里插入图片描述
  • 网络编程:在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换

1.2 网络编程三要素

IP地址

  • 要想让网络中的计算机能够 互相通信,必须为每台计算机指定一个标识号, 通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识

端口

  • 网络的通信, 本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备 ,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识

协议

  • 通过计算机网络可以使多 台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守-定的规则,这就好比在道路中行驶的汽车-定要遵守交通规则一 样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定, 通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议

1.3 IP地址

  • IP地址:是网络中设备的唯一标识

  • IP地址分为两大类

    • IPv4:是给每个连接在网络上的主机分配一个32bit地址。 按照TCP/IP规定,IP地址用二进制来表示, 每个P地址长32bit,也就是4个字节。例如一个采用I进制形式的IP地址是11000000 101010000000001 01000010" ,这么长的地址,处理起来也太费劲了。为了方便使用,IP地址经常被写成+进制的形式,中间使用符号"分隔不同的字节。于是,. 上面的IP地址可以表示为"192168. 1.66" . IP地址的这种表示法叫做"盼+进制表示法”, 这显然比1和0容易记忆得多

    • IPv6:由于互联网的蓬勃发展, IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,通过IPv6重新定义地址空间,采用128位地址长度,每16个字节-组,分成8组十六进制数,这样就解决了网络地址资源数量不够的问题

  • 常用命令

    • ipconfig: 查看本机P地址
    • ping IP地址:检查网络是否连通
  • 特殊IP地址127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用

1.4 InetAddress的使用

  • 为了方便我们对IP地址的获取和操作, Java提供了一个类InetAddress供我们使用

  • InetAddress:此类表示Internet协议(IP) 地址

  • 导包:import java.net.InetAddress

方法名说明
static InetAddress getByName(String host)确定主机名称的IP地址。 主机名称可以是机器名称,也可以是IP地址
String getHostName()获取此IP地址的主机名
String getHostAddress()返回文本显示中的IP地址字符串
  • 范例
package test;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Demo {
    public static void main(String[] args) throws UnknownHostException {
        //1,static InetAddress getByName(String host) 	确定主机名称的IP地址。 主机名称可以是机器名称,也可以是IP地址
//        InetAddress address = InetAddress.getByName("YM");
        InetAddress address = InetAddress.getByName("192.168.128.1"); //推荐使用
        System.out.println(address); //YM/192.168.128.1

        //2,String getHostName() 	获取此IP地址的主机名
        String hostName = address.getHostName();
        System.out.println(hostName); //YM

        //3,String getHostAddress() 	返回文本显示中的IP地址字符串
        String hostAddress = address.getHostAddress();
        System.out.println(hostAddress); //192.168.128.1
    }
}

1.5 端口

  • 端口:设备上应用程序的唯一标识
  • 端口号:用两个字节表示的整数,它的取值范围是0~65535。其中, 0~ 1023之间的端口号用于些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

1.6 协议

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

UDP协议

  • 用户数据报协议(User Datagram Protocol)
  • UDP是无连接通信协议, 即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外-台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
  • 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频视频和普通数据的传输
  • 例如视频会议通常采用UDP协议, 因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

TCP协议

  • 传输控制协议 (Transmission Control Protocol)

  • TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手"

  • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

    • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认
    • 第二次握手,服务器端向客户端回送一个响应, 通知客户端收到了连接请求
    • 第三次握手,客户端再次向服务器端发送确认信息,确认连接
      在这里插入图片描述
  • 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、 浏览网页等

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

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

相关文章

Java-多线程-增强篇-锁 强化 第一篇

今天我们来学一下锁 会持续保持更新 欢迎追更哈 Java - 多线程 - 锁和提升 第1篇 首先强调一点:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。同时,类锁也是对象锁,类是Class对象 Java8锁 核心思想 关键…

新建微服务模块Maven子工程

gitegg-cloud是微服务框架,整体功能是非业务相关的基础功能,在实际业务开发过程中需要新建微服务的业务模块,根据业务的整体规划,设计新建Maven子工程。   下面以常用的电商项目举例新建Maven子工程,电商项目一般包含…

【总结】2023数学建模美赛!收官!

今年的美赛时间是2.17-2.21,这学期疫情放开了之后管的没那么严了,我们小组就都提前一天到学校了,全力准备17号的比赛。 时间流程 刚拿到6个题的时候,我们三个人一人看两个题,每个人从两个题中再选出来一个自己觉得有…

【蓝桥杯每日一题】前缀和算法

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…

数据结构与算法(三):栈与队列

上一篇《数据结构与算法(二):线性表》中介绍了数据结构中线性表的两种不同实现——顺序表与链表。这一篇主要介绍线性表中比较特殊的两种数据结构——栈与队列。首先必须明确一点,栈和队列都是线性表,它们中的元素都具…

4、Redis安装

前言:工具下载地址阿里云盘:Redis:https://www.aliyundrive.com/s/qSYxRyXAxQy提取码: ne27一、Redis下载下载地址:https://github.com/tporadowski/redis/releases此处下载mis版本,安装版mis版直接安装成功就启动服务…

CCNP350-401学习笔记(451-500题)

451、what is the function of the LISP map resolver? A. to send traffic to non-LISP sites when connected to a service provider that does not accept nonroutable EIDs as packet sources B. to connect a site to the LISP-capabie part of a core network, publish …

数据挖掘,计算机网络、操作系统刷题笔记53

数据挖掘,计算机网络、操作系统刷题笔记53 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

2023年AI语音会议汇总

2023年,AI语音领域学术会议精彩纷呈,语音之家汇总了国内外重要的会议呈现给大家,大家可根据时间统筹安排好2023年的学术活动交流行程。如果信息有误,欢迎指正。 ICASSP 2023 2023 IEEE International Conference on Acoustics, S…

【操作系统】概述

操作系统 操作系统的定义与目标 定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。 目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,…

node.js降低版本的方式(解决sass和node.js冲突)

一、概述 在使用vue的时候,会遇到项目的依赖(package.json可以查看依赖信息)下载失败的原因。因为项目用的依赖和要运行环境的node.js版本起了冲突,这个时候就要么更改项目的依赖版本,要么更改node.js的版本。本文示范…

11种主流生成式AI应用【2023】

生成式 AI 允许在几分钟内生成新颖逼真的视觉、文本和动画内容。 据 Gartner 称,到 2025 年,生成式 AI 生成的数据将占所有生成数据的 10%。 作为 2022 年最重要的战略技术趋势之一,人工智能 (AI) 的这一分支具有广泛的应用,适用…

提高转化率的 3 个客户引导最佳实践

如果您的试用客户没有转化为付费客户,或者您总体上正在努力解决试用到付费转化率,那么您来对地方了。本文的最终目标是向您展示一些可用于提高自己的激活率和整体试用到付费转化的最佳客户引导实践。SaaS公司目前生活在一个以产品为主导的增长时代。换句…

Tencent OS下逻辑卷(LVM)增加硬盘扩容

上一篇文章写了逻辑卷创建以及使用剩余空间为已经创建的逻辑卷扩容。 本篇是针对卷组空间已经用尽时的扩容方法。那就是增加硬盘。 首先我们为虚拟机增加硬盘/dev/sdd 使用fdisk为/dev/sdd分区,方法在上一篇文章已经描述,在此不再赘述。 新增的硬盘使用如下命令添加到卷组…

【日志框架-笔记】JUL日志框架的介绍及其使用

日志框架JUL日志框架入门程序Logger直接的父子继承关系Formatters独立的配置文件进行编写日志使用日志打印异常学习日志无非就是为了四大目的: 问题诊断,调试程序;错误定位,定位数据问题、网络问题、内存问题等错误位置&#xff…

【进阶教程】Appium自动化测试,太详细了!

目录Appium环境搭建Mac iOS环境搭建Appium基础Appium进阶Monkey的使用Copyadb shell monkey -p com.lqr.wechat -v 500 > monkey.logadb shell monkey -p com.lqr.wechat -vvv 5000 > monkey2.logadb shell monkey -p com.lqr.wechat -vvv 5000--send1556166765229 --thr…

pdb文件删除杂原子 HETATM;保留或去除水分子

删除杂原子 HETATM;去除水分子 with open(r"C:*****\StructA.pdb", "r") as inputFile,open(r"C*****8\StructA_remove_HETATM.pdb","w") as outFile:for line in inputFile:if not line.startswith("HETATM"):…

C++复习笔记13

多态:具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。(同一个接口根据调用对象不同产生不同的行为)。两个条件: 1. 必须通过基类的指针或者引用调用虚函数。 2. 被调用的函数必须是虚函数&#x…

ESP32 Arduino FAT文件系统详细使用教程

ESP32 Arduino FAT文件系统详细使用教程📌参考1(在 Linux环境下创建二进制文件):https://github.com/marcmerlin/esp32_fatfsimage📌参考2 http://marc.merlins.org/perso/arduino/post_2019-03-30_Using-FatFS-FFat-o…

Scala函数式编程(第五章:函数基础、函数高级详解)

文章目录第 5 章 函数式编程5.1 函数基础5.1.1 函数基本语法5.1.2 函数和方法的区别5.1.3 函数定义5.1.4 函数参数5.1.5 函数至简原则(重点)5.2 函数高级5.2.1 高阶函数5.2.2 匿名函数5.2.3 高阶函数案例5.2.4 函数柯里化&闭包5.2.5 递归5.2.6 控制抽…