基于java的网络编程入门

news2025/4/25 23:14:06

1. 什么是IP地址

由此可见,32位最大为255.255.255.255

打开cmd查询自己电脑的ip地址:ipconfig

测试网络是否通畅:ping 目标ip地址

2. IP地址的组成

注意:127.0.0.1是回送地址,指本地机,一般用来测试使用

我们生活中一般使用的是C类IP地址,如:你的ip是192.168.75.5,这是你的内网ip,非内网的用户无法通过此ip连接到你的电脑。如果此时你连接的是wifi路由器,那么就可以轻松验证网络地址,192.168.75就是网络地址,可以在路由器机盒的底部信息找到,.5就是主机地址,那么也就是说,该路由器最大容量为255,即最大为192.168.75.255,除去网关等地址实际可承载最大连接设备数可能在250左右。

如图所示,假设有两个路由器,一个是192.168.75.1,一个是192.168.76.1

192.168.75.15和192.168.75.160连接着第一个路由器

192.168.76.12和192.168.76.135连接着第二个路由器

在没有连接互联网的情况下,192.168.75.15去ping 192.168.75.160是可以接受和发送数据包的,同理76,但是用75的主机去ping76的主机是无法传输的,因为他们之间没有连接。在没有外网的连接下,左边和右边的三台设备各自组成了局域网。

用百度来举例,180.101.51.73就是公网(对全球放行),www.baidu.com这个则是域名。那么什么是域名呢?

3. DNS域名解析

DNS(Domain Name System)即域名系统,是互联网的一项核心服务。域名是便于人们记忆和使用的网站地址,如www.baidu.com,而计算机在网络中通信需要使用 IP 地址,如 14.215.177.38。DNS 域名解析就是把域名转换为计算机能够识别的 IP 地址的过程。

作用和意义

  • 方便记忆和使用:域名具有一定的语义和逻辑性,相比复杂的 IP 地址,更容易被用户记住和输入。
  • 便于管理和维护:通过 DNS 系统,网站管理员可以方便地更改网站服务器的 IP 地址,而无需用户修改访问地址。只需要在 DNS 服务器上进行相应的配置更改,用户就可以通过域名继续访问网站,而不会受到 IP 地址变化的影响。
  • 实现负载均衡:DNS 可以将同一个域名解析到多个不同的 IP 地址上,通过这种方式,可以将用户的访问请求分配到不同的服务器上,实现负载均衡,提高系统的性能和可靠性。

4. 网络服务器

邮件服务器基本不用,我们更专注于对Web服务器的使用:

  • 定义:Web 服务器是一种专门用于处理和传输 Web 页面的网络服务器。它主要负责接收客户端(如浏览器)发送的 HTTP 请求,根据请求内容返回相应的 HTML 页面、图片、脚本等资源,以实现 Web 应用程序的访问和交互。
  • 功能:Web 服务器的核心功能是处理 HTTP 协议,解析客户端发送的请求,并根据请求的 URL 和其他参数来定位和获取相应的资源。然后,将这些资源按照 HTTP 协议的规定进行封装和传输,返回给客户端浏览器。此外,Web 服务器还可以支持 SSL/TLS 加密,以确保数据在传输过程中的安全性;同时,它还能够进行访问控制、日志记录等管理功能,方便对网站的访问进行监控和管理。
  • 常见的 Web 服务器软件
    • Apache:是一款开源的、广泛使用的 Web 服务器软件。它具有高度的稳定性和可扩展性,支持多种操作系统,能够处理大量的并发请求。Apache 还拥有丰富的模块和插件,可通过各种配置文件进行灵活的定制和扩展,适用于各种规模的网站和应用程序。

我们后续会对Web服务器做更多讲解,现在只需暂时了解即可。 

5. 网络通信协议(TCP/UDP)⭐(重点)

TCP⭐

  • 特点
    • 面向连接:在数据传输之前,需要先在发送方和接收方之间建立连接,就像打电话一样,先拨号建立连接,然后才能通话。连接建立过程通过 “三次握手” 来完成,确保双方都做好了数据传输的准备。
    • 可靠传输:TCP 通过序列号、确认应答、重传机制等保证数据的可靠传输。发送方会为每个发送的数据段分配一个序列号,接收方收到数据后会发送确认应答给发送方。如果发送方在一定时间内没有收到确认应答,就会认为数据传输失败,并重传该数据段。
    • 字节流传输:TCP 将数据看作是无结构的字节流,它不关心数据的具体内容和格式,只负责将字节流从发送方准确地传输到接收方。
    • 流量控制与拥塞控制:TCP 具有流量控制机制,通过接收方告知发送方自己的接收窗口大小,来控制发送方的发送速度,防止发送方发送数据过快导致接收方缓冲区溢出。同时,TCP 还具备拥塞控制机制,当网络出现拥塞时,自动调整发送方的发送速率,以避免网络拥塞进一步恶化。
  • 应用场景:适用于对数据准确性和完整性要求较高的场景,如文件传输、电子邮件、网页浏览、远程登录等。例如,在下载文件时,需要确保文件的每个字节都准确无误地传输到本地,TCP 的可靠传输特性就能很好地满足这一需求。

字节流对应的就是File I/O里的InputStream和OutputStream! 也就是Buffer!

UDP

  • 特点
    • 无连接:UDP 在数据传输时不需要先建立连接,就像写信一样,直接将信件(数据)发送出去,不需要事先与接收方打招呼。这种方式使得 UDP 的传输效率较高,延迟较小。
    • 不可靠传输:UDP 不保证数据一定能被正确接收,也不提供确认应答、重传等机制。数据发送出去后,UDP 不会关心数据是否到达接收方,以及接收方是否正确接收。因此,UDP 可能会出现数据丢失、重复或乱序的情况。
    • 数据报传输:UDP 将数据封装成一个个独立的数据报进行传输,每个数据报都包含源端口、目的端口、数据等信息。数据报之间相互独立,没有顺序关系。
    • 无流量控制和拥塞控制:UDP 没有内置的流量控制和拥塞控制机制,发送方可以按照自己的速率发送数据,不会根据网络状况和接收方的情况进行调整。
  • 应用场景:适用于对实时性要求较高、对数据准确性要求相对较低的场景,如实时视频会议、音频流传输、在线游戏等。例如,在视频会议中,偶尔丢失一些数据帧可能只会导致画面出现轻微的卡顿,但不会影响整体的会议效果,而 UDP 的低延迟特性能够保证视频和音频的实时传输,让用户获得较好的体验。

6. Socket简介(重点) ⭐

java.net 包

Socket和ServerSocket面向TCP协议,DatagramPacket和DatagramSocket面向UDP协议,InetAddress则是面向ip地址。

我们现在重点面向TCP开发。

7. 基于TCP协议的Socket编程(重点) ⭐

下面是例子详细流程:

首先我们创建两个project,一个充当Server一个充当Client

在Server中:

()内要填写的是一个端口,什么是端口呢?假设此时我们的电脑通过ip地址连接了,那么我用微信给你发送的信息你需要用微信来接收,不能歪到QQ去接收,那么此时监听微信的端口就可以锁定你的微信,从而不让信息流向错误位置的地方。端口最大为1-65535。建议使用1024以上的端口,因为1024以下的端口有可能被系统占用。

那么我们使用8888来继续操作:

现在我们创建了服务器,那么就要等待别人来连接我们,比如微信输入了账号密码以后点击登录,此时账号和密码会发送给服务器,服务器验证了账号密码看是否存在,返回一个值。我们调用一个堵塞方法来等待别人连接服务器。

输出结果:

我们发现 “有人连接了” 并没有被打印,因为并没有人来连接,所以被accept方法堵住了。

在Client中:

首先使用Socket类创建对象,然后输入目标ip地址和Sever中预设的端口。这样,我们基础的连接就完成了。

运行一下代码,回到Server中查看输出

输出结果:

接下来我们尝试发送信息!

Client:

Server:

输出结果:

接下来服务器给客户端返回一条信息,此时客户端就要关闭输出的嘴巴,打开收听的耳朵:

Client:

Server:

输出结果:

注意:使用完对应的方法后要记得在结尾关闭!

8. Socket中实现对象的传递

Java 序列化是指把 Java 对象转换为字节序列的过程,而反序列化则是把字节序列恢复为 Java 对象的过程。序列化主要用于对象的存储和网络传输。

注意:发送和接收的对象需要在同一个包名里!这是规范!

下面是例子详细流程:

在myTcpServer中创建一个com.zb.entity包,创建一个Student类:

同理,在myTcpClient创建一个com.zb.entity包,创建一个Student类。

在Server中建立一个ObjectServer:

在Client中初始化信息:

然后尝试运行,打开服务器,在Client中运行程序,会发现报错:

为什么会报错呢?因为Student这个类没有被序列化(Serializable),所以我们需要给Student类添加一个接口使其可序列化:

现在运行就不会报错了。

同样的,Server在接收该对象后也需要将其序列化,这样也可以读取信息了。

接下来进行发送接收验证操作:

Client:

Server:

我们会发现在我们写到readObject()的时候系统提示我们抛出一个ClassNotFoundException(对象没有被找到)异常,这也证明了ObjectInputStream接收的正是对象。

运行代码,输出结果:

我们发现,在我们运行代码时,每运行一次服务器都要开启一次,在现实中服务器通常365天都在运行,那么我们该如何让服务器不停的运作呢?

用while死循环可以启到这样的作用

这样Client每运行一次,客户端都会打印一次输出。

加强练习:收到学生信息后返回给客户端一条信息,代码在另一篇代码展示中。

9. 多线程处理多请求

在上面的对象传递代码中,我们给服务器休眠5秒

如果我同时有张三和李四两个人对服务器发出请求,我们会发现两个人在同一时间点发出的请求,服务器却是一个一个的处理请求:

也就是说我们服务器现在正在做单线程处理,如果张三出现了问题,那么李四就因为张三的故障从而一直等待,进不去系统,那我们该如何解决呢?

下面是例子详细流程:

首先我们在MyTcpServer中创建一个ServerSocketThread类,继承Thread父类,创建一个连接对象

然后将之前模拟的代码剪切到run方法中

接着CTRL+ALT+T选中的区域快速生成try-catch块

编写一个finally,将下面关闭流close()放进去,选中也try-catch一下

回到主线程中

这样,我们就把处理网络通信的数据处理交给了一个独立的线程来做,这个线程内实现的就是我们读和写的功能,运行两个客户端得到结果

输出结果

张三:

李四:

Server:

附录:

基于java的网络编程入门的课堂演示代码-CSDN博客

课后练习:

TCP基础题:音乐播放列表管理系统-CSDN博客

TCP基础题:电影收藏管理系统-CSDN博客

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

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

相关文章

Git简介与入门

Git的发明 Git由著名的Linux创始人linus于2005年发明(所以git的界面、使用方式与Linux挺像的,即命令行方式) 经过发展,现在广泛应用于代码管理与团队协作。 Git特性 Git是分布式版本控制系统 分布式 每个开发者拥有完整仓库&…

Linux 网络基础三 (数据链路层协议:以太网协议、ARP 协议)

一、以太网 两个不同局域网的主机传递数据并不是直接传递的,而是通过路由器 “一跳一跳” 的传递过去。 跨网络传输的本质:由无数个局域网(子网)转发的结果。 所以,要理解数据跨网络转发原理就要先理解一个局域网中数…

16.QT-Qt窗口-菜单栏|创建菜单栏|添加菜单|创建菜单项|添加分割线|添加快捷键|子菜单|图标|内存泄漏(C++)

Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃QWidget类,并且提供了⼀个预定义的布局。QMainWindow包含⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部…

[特殊字符] 分布式定时任务调度实战:XXL-JOB工作原理与路由策略详解

在微服务架构中,定时任务往往面临多实例重复执行、任务冲突等挑战。为了解决这一问题,企业级调度框架 XXL-JOB 提供了强大的任务统一调度与执行机制,特别适合在分布式系统中使用。 本文将从 XXL-JOB 的核心架构入手,详细讲解其调…

java面试题及答案2020,java最新面试题(四十四)

java面试题及答案2020 二面-2020/3/18 1、自我介绍项目比赛 2、java集合框架全部介绍。。从list set queue到map 3、hashmap底层扩容线程安全问题 4、如果-一个对象要作为hashmap的key需要做什么 5、Threadlocal类以及 内存泄漏 6、线程同步方式,具体每一个怎么做的 7、jvm类加…

oracle 锁的添加方式和死锁的解决

DML锁添加方式 DML 锁可由一个用户进程以显式的方式加锁,也可通过某些 SQL 语句隐含方式实现。 DML 锁有三种加锁方式:共享锁方式、独占锁方式、共享更新。 共享锁,独占锁用于 TM 锁,共享锁用于 TX 锁。 1)共享方式的表级锁 共享方…

基于Hadoop的音乐推荐系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本毕业生数据分析与可视化系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java语言、爬虫技术进行编写,使用了Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括&#xff…

Java查询数据库表信息导出Word

参考: POI生成Word多级标题格式_poi设置word标题-CSDN博客 1.概述 使用jdbc查询数据库把表信息导出为word文档, 导出为word时需要下载word模板文件。 已实现数据库: KingbaseES, 实现代码: 点击跳转 2.效果图 2.1.生成word内容 所有数据库合并 数据库不合并 2.2.生成文件…

RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)

目录 前言:v4l-utils简介 一:查找当前的摄像头设备 二:查看当前摄像头支持的v4l2-ctl调试参数 三根据提示设置对应参数,在提示范围内设置 四:常用调试命令 五:应用内执行命令方法 前言:v4l-utils简介 v4l-utils工具是由Linu…

在Linux中,使用read函数去读取写入文件空洞部分时,读取出来的内容是什么?为什么这样操作,以及应用场景?

使用 read 函数读取文件空洞(hole)部分时,读取到的内容会被系统填充为 \0(即零字节)。文件空洞是稀疏文件中未实际分配磁盘空间的区域,但逻辑上表现为连续的零字节。 1.在指定空洞部分后,写入数…

Qt6笔记-对Qt6中对CMakeLists.txt的解析

首先,新建Qt Console Application项目。 下面对CMakeLists.txt进行次理解。新建好后,Qt Creator会生成CMakeLists.txt,具体内容如下: cmake_minimum_required(VERSION 3.16)project(EasyCppMain LANGUAGES CXX)set(CMAKE_AUTOUIC…

CIFAR10图像分类学习笔记(三)---数据加载load_cifar10

新创建一个load_cifar10源文件 需要导入的包 import glob from torchvision import transforms from torch.utils.data import DataLoader ,Dataset import os #读取工具 from PIL import Image import numpy as np 01同样定义10个类别的标签名数组 label_name ["airpl…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

Java学习手册:JSON 数据格式基础知识

1. JSON 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。它最初来源于 JavaScript,但如今已被许多语言所采用,包括 Java、Python、C 等。JSON 以…

《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢

在人工智能飞速发展的今天,数据孤岛和工具碎片化问题一直是阻碍AI应用高效发展的两大难题。由于缺乏统一的标准,AI应用难以无缝地获取和充分利用数据价值。 为了解决这些问题,2024年AI领域提出了MCP(Model Context Protocol模型上…

深度图可视化

import cv2# 1.读取一张深度图 depth_img cv2.imread("Dataset_depth/images/train/1112_0-rgb.png", cv2.IMREAD_UNCHANGED) print(depth_img.shape) cv2.imshow("depth", depth_img) # (960, 1280) print(depth_img)# 读取一张rgb的图片做对比 input_p…

微软Edge浏览器字体设置

前言 时间:2025年4月 自2025年4月起,微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans,如下图。Noto Sans字体与微软雅黑风格差不多,但在4K以下分辨率的显示器上较微软雅黑更模糊,因此低分辨率的显示器建议…

Vue生命周期详细解析

前言 Vue.js作为当前最流行的前端框架之一,其生命周期钩子函数是每个Vue开发者必须掌握的核心概念。本文将全面解析Vue的生命周期,帮助开发者更好地理解Vue实例的创建、更新和销毁过程。 一、Vue生命周期概述 Vue实例从创建到销毁的整个过程被称为Vue…

基于c#,wpf,ef框架,sql server数据库,音乐播放器

详细视频: 【基于c#,wpf,ef框架,sql server数据库,音乐播放器。-哔哩哔哩】 https://b23.tv/ZqmOKJ5

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…