当前位置: 首页 > news >正文

【Java基础 下】 030 -- 网络编程

目录

一、什么是网络编程

1、常见的软件架构(CS & BS)

①、BS架构的优缺点

②、CS架构的优缺点

2、小结

二、网络编程三要素

1、IP

①、IPv4

②、IPv6

③、小结

④、IPv4的一些细节

⑤、InetAddress的使用

2、端口号

3、协议

①、TCP & UDP

三、UDP通信程序

①、发送数据

②、接收数据

③、UDP练习(聊天室)

④、UDP的三种通信方式(单播、组播、广播)

四、TCP通信程序

1、书写代码步骤

2、代码细节

①、三次握手

②、四次挥手

③、小结

五、综合练习

1、TCP通信练习1 —— 多发多收

2、TCP通信练习2 —— 接收和反馈

①、示例代码:

②、小细节:(socket read结束标记)

3、TCP通信练习3 —— 上传文件

4、TCP通信练习4 —— 上传文件(文件名重复问题)

①、UUID类

②、示例代码

5、TCP通信练习5 —— 上传文件(多线程版)

6、TCP通信练习6 —— 上传文件(线程池优化)

7、TCP通信练习7 ——  BS(接收浏览器的消息并打印)

8、TCP通信练习7 —— 网络编程(课后大作业)


一、什么是网络编程

1、常见的软件架构(CS & BS)

①、BS架构的优缺点

优点:

缺点:

②、CS架构的优缺点

优点:

缺点:

2、小结

二、网络编程三要素

1、IP

①、IPv4

②、IPv6

③、小结

④、IPv4的一些细节

局域网IP举例:(利用局域网节省IP)

特殊的IP地址(回环地址):

自己给自己发数据的话,可以直接使用127.0.0.1,这是因为不同路由器分配的IP不固定,造成想要自己给自己发数据,IP也要跟着变

常用的CMD命令:

⑤、InetAddress的使用

InetAddress类表示互联网协议(IP)地址

示例代码:

2、端口号

3、协议

①、TCP & UDP

UDP适用于:在线视频、网络会议

TCP适用于:发送邮件、文字聊天

三、UDP通信程序

①、发送数据

示例代码:

②、接收数据

示例代码:

接收和发送端口要一致

这里发送的端口是随机的,你只需要保证要发送到的端口和接收端口一致即可

小细节:receive方法是阻塞的

③、UDP练习(聊天室)

示例代码:(发送端)

示例代码:(接收端)

允许多个发送端:(允许一个类可以运行多次)

④、UDP的三种通信方式(单播、组播、广播)

单播:1对1

组播:1对1组

广播:1对所有

代码实现:

组播发送端代码:

组播接收端代码:

广播代码:

四、TCP通信程序

1、书写代码步骤

示例代码:(发送数据 -- 客户端)

(接收数据 -- 服务端):

但上述代码会出现中文乱码的问题,那么如何解决这个问题呢?

【Solution】:接收端要结合编码表进行接收,使用转换流InputStreamReader,将字节流转换成字符流。同时,为了进一步提高读写的效率,我们可以在外面再包上一层缓冲流BufferedReader.

2、代码细节

①、三次握手

三次握手的过程是为了确保连接建立

②、四次挥手

四次挥手是为了确保连接断开,且数据处理完毕

③、小结

TCP挥手的时候,客户端会和服务端互发消息,其发送的数据包就是ICMP

五、综合练习

1、TCP通信练习1 —— 多发多收

示例代码:

Client

Server

2、TCP通信练习2 —— 接收和反馈

①、示例代码:

②、小细节:(socket read结束标记)

那么解决办法也很简单,写一个结束标记即可

3、TCP通信练习3 —— 上传文件

示例代码:

Client

Server

4、TCP通信练习4 —— 上传文件(文件名重复问题)

①、UUID类

示例代码:

但是我不想要横杠,应该如何处理:replace()替换

②、示例代码

与练习3相比,代码更改如下:

客户端代码没有任何修改

5、TCP通信练习5 —— 上传文件(多线程版)

示例代码:

Server

MyRunnable.java

客户端代码没有任何修改

6、TCP通信练习6 —— 上传文件(线程池优化)

示例代码:

Server

客户端代码没有任何修改

7、TCP通信练习7 ——  BS(接收浏览器的消息并打印)

示例代码:

Server

在浏览器中输入IP和端口号,BS架构中,浏览器其实就是客户端

8、TCP通信练习7 —— 网络编程(课后大作业)

服务器端在这里的作用就是【消息转发

完整需求可参见【网络编程课后大作业完整需求.md】

待补充~

实现效果:

相关文章:

【Java基础 下】 030 -- 网络编程

目录 一、什么是网络编程 1、常见的软件架构(CS & BS) ①、BS架构的优缺点 ②、CS架构的优缺点 2、小结 二、网络编程三要素 1、IP ①、IPv4 ②、IPv6 ③、小结 ④、IPv4的一些细节 ⑤、InetAddress的使用 2、端口号 3、协议 ①、TCP & UDP 三、…...

2021牛客OI赛前集训营-提高组(第三场) T3打拳

2021牛客OI赛前集训营-提高组(第三场) 题目大意 有2n2^n2n个选手参加拳击比赛,每个人都有一个实力,所有选手的实力用一个111到2n2^n2n的排列表示。 淘汰赛的规则是:每次相邻的两个选手进行比赛,实力值大…...

C++面向对象编程之四:成员变量和成员函数分开存储、this指针、const修饰成员和对象

在C中&#xff0c;成员变量和成员函数是分开存储的&#xff0c;只有非静态成员变量才存储在类中或类的对象上。通过该类创建的所有对象都共享同一个函数#include <iostream> using namespace std;class Monster {public://成员函数不占对象空间&#xff0c;所有对象共享同…...

卷积神经网络(CNN)基础知识

文章目录CNN的组成层卷积层卷积运算卷积的变种分组卷积转置卷积空洞卷积可变形卷积卷积层的输出尺寸和参数量CNN的组成层 在卷积神经⽹络中&#xff0c;⼀般包含5种类型的⽹络层次结构&#xff1a;输入层、卷积层、激活层、池化层和输出层。 输入层&#xff08;input layer&a…...

opencv+python 常见图像预处理

import os import cv2 import numpy as np import pandas as pd from PIL import Image import matplotlib.pylab as plt """图像预处理"""#缩放 #灰度化 #二值化-otsu,自定义&#xff0c;自适应 #均值滤波 #中值滤波 #自定义滤波 #高斯/双倍滤波…...

如何实现一个单例模式

目录 前言 1.饿汉式 2.懒汉式 3.双重检测 4.静态内部类 5.枚举 总结&#xff1a; 前言 单例模式是我们日常开发过程中&#xff0c;遇到的最多的一种设计模式。通过这篇文章主要分享是实现单例的几种实现方式。 1.饿汉式 饿汉式的实现方式比较简单。在类加载的时候&#…...

传输线的物理基础(四):传输线的驱动和返回路径

驱动一条传输线对于将信号发射到传输线的高速驱动器&#xff0c;传输线在传输时间内的输入阻抗将表现得像一个电阻&#xff0c;相当于线路的特性阻抗。鉴于此等效电路模型&#xff0c;我们可以构建驱动器和传输线的电路&#xff0c;并计算发射到传输线中的电压。等效电路如下图…...

Java多态性

文章目录对象的多态性多态的理解举例7.2 多态的好处和弊端7.3 虚方法调用(Virtual Method Invocation)7.4 成员变量没有多态性7.5 向上转型与向下转型7.6 为什么要类型转换呢&#xff1f;7.7 如何向上转型与向下转型7.8 instanceof关键字7.9 复习&#xff1a;类型转换7.10 练习…...

算法拾遗二十七之窗口最大值或最小值的更新结构

算法拾遗二十七之窗口最大值或最小值的更新结构滑动窗口题目一题目二题目三题目四滑动窗口 第一种&#xff1a;R&#xff0c;R右动&#xff0c;数会从右侧进窗口 第二种&#xff1a;L&#xff0c;L右动&#xff0c;数从左侧出窗口 题目一 arr是N&#xff0c;窗口大小为W&…...

【带你搞定第二、三、四层交换机】

​ 01 第二层交换机 OSI参考模型的第二层叫做数据链路层&#xff0c;第二层交换机通过链路层中的MAC地址实现不同端口间的数据交换。 第二层交换机主要功能&#xff0c;就包括物理编址、错误校验、帧序列以及数据流控制。 因为这是最基本的交换技术产品&#xff0c;目前桌面…...

C++基础了解-22-C++ 重载运算符和重载函数

C 重载运算符和重载函数 一、C 重载运算符和重载函数 C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义…...

BatchNormalization

目录 Covariate Shift Internal Covariate Shift BatchNormalization &#xff31;1:BN的原理 Q2:BN的作用 Q3:BN的缺陷 Q4&#xff1a;BN的均值、方差的计算维度 Q5&#xff1a;BN在训练和测试时有什么区别 Q6&#xff1a;BN的代码实现 Covariate Shift 机器学习中&a…...

vue 中安装插件实现 rem 适配

vue 中实现 rem 适配vue 项目实现页面自适应&#xff0c;可以安装插件实现。 postcss-pxtorem 是 PostCSS 的插件&#xff0c;用于将像素单元生成 rem 单位。 autoprefixer 浏览器前缀处理插件。 amfe-flexible 可伸缩布局方案替代了原先的 lib-flexible 选用了当前众多浏览…...

Hadoop学习

1.分布式与集群 hosts文件&#xff1a; 域名映射文件 2.Linux常用命令 ls -a&#xff1a;查看当前目录下所有文件mkdir -p&#xff1a;如果没有对应的父文件夹&#xff0c;会自动创建rm -rf&#xff1a;-f&#xff1a;强制删除 -r&#xff1a;递归删除cp -r&#xff1a;复制文…...

Golang反射源码分析

在go的源码包及一些开源组件中&#xff0c;经常可以看到reflect反射包的使用&#xff0c;本文就与大家一起探讨go反射机制的原理、学习其实现源码 首先&#xff0c;了解一下反射的定义&#xff1a; 反射是指计算机程序能够在运行时&#xff0c;能够描述其自身状态或行为、调整…...

Qt之悬浮球菜单

一、概述 最近想做一个炫酷的悬浮式菜单&#xff0c;考虑到菜单展开和美观&#xff0c;所以考虑学习下Qt的动画系统和状态机内容&#xff0c;打开QtCreator的示例教程浏览了下&#xff0c;大致发现教程中2D Painting程序和Animated Tiles程序有所帮助&#xff0c;如下图所示&a…...

易优cms attribute 栏目属性列表

attribute 栏目属性列表 attribute 栏目属性列表 [基础用法] 标签&#xff1a;attribute 描述&#xff1a;获取栏目的属性列表&#xff0c;或者单独获取某个属性值。 用法&#xff1a; {eyou:attribute typeauto} {$attr.name}&#xff1a;{$attr.value} {/eyou:attri…...

表格中的table-layout属性讲解

表格中的table-layout属性讲解 定义和用法 tableLayout 属性用来显示表格单元格、行、列的算法规则。 table-layout有三个属性值&#xff1a;auto、fixed、inherit。 fixed&#xff1a;固定表格布局 固定表格布局与自动表格布局相比&#xff0c;允许浏览器更快地对表格进行布…...

【MFA】windows环境下,使用Montreal-Forced-Aligner训练并对齐音频

文章目录一、安装MFA1.安装anaconda2.创建并进入虚拟环境3.安装pyTorch二、训练新的声学模型1.确保数据集的格式正确2.训练声音模型-导出模型和对齐文件3.报错处理1.遇到类似&#xff1a; Command ‘[‘createdb’,–host‘ ’, ‘Librispeech’]’ returned non-zero exit sta…...

C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;c项目 获取完整源码源文件视频讲解环境资源包文档说明等 包括火车订票系统、学生个人消费管理系统、超级万年历、学生信息管理系统、网络通信编程、商品管理系统、通讯录管理系统、企业员工管理系统、贪吃蛇游戏、图书管理…...

OpenAI Agents SDK实战:构建多智能体协作系统的核心概念与最佳实践

1. 从零到一&#xff1a;理解 OpenAI Agents SDK 的核心价值 如果你正在用 JavaScript 或 TypeScript 捣鼓 AI 应用&#xff0c;尤其是想让多个 AI 智能体&#xff08;Agent&#xff09;协同工作&#xff0c;那么 OpenAI 官方推出的这个 Agents SDK 绝对值得你花时间研究。它不…...

【实战篇 / ZTNA】(7.0) ❀ 从零到一:FortiClient 7.0 企业级部署与策略配置全解析 ❀ FortiGate 防火墙

1. FortiClient 7.0 企业级部署前的关键规划 企业级部署FortiClient 7.0绝非简单的软件安装&#xff0c;而是涉及终端安全架构的整体升级。我在多个金融和制造业客户的实际部署中发现&#xff0c;前期规划不充分往往导致后期策略调整困难。首先需要明确的是&#xff0c;FortiCl…...

# 软考软件设计师·考前14天终极冲刺

&#x1f4da; 软考软件设计师考前14天终极冲刺&#x1f4c5; 2026年5月9日 | 距考试仅剩14天&#xff08;5月23-26日&#xff09; &#x1f3af; 今日主题&#xff1a;终极冲刺策略 全模块速查 12大易混淆概念辨析 10道精准选择题一、⏰ 14天冲刺倒计时战略规划 &#x1f4…...

机场混凝土道面摊铺车辆行驶控制【附方案】

✨ 长期致力于履带式车辆、滑模摊铺、道面边界检测、轨迹规划、行驶控制器研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;多模态道面边界检测与卡尔曼…...

有话直说可以解决90%的误解的庖丁解牛

它的本质是&#xff1a;将高维度的、模糊的、充满噪声的 心理潜台词 (Subtext/Implicit Context)&#xff0c;强制降维并编码为低维度的、精确的、无歧义的 显性语言 (Explicit Language)。这是一种 去序列化 (Deserialization) 的过程&#xff0c;旨在消除接收端因“猜测”、“…...

从零到实战:用STM32F4的CAN总线做一个简易的‘车载仪表盘’数据收发Demo

从零到实战&#xff1a;用STM32F4的CAN总线构建车载仪表盘数据交互系统 当你坐进一辆现代汽车&#xff0c;仪表盘上跳动的转速、车速、油量数据背后&#xff0c;是CAN总线在默默协调着各个电子控制单元(ECU)的通信。本文将带你用两块STM32F407开发板&#xff0c;亲手搭建一个微…...

C语言中的strchr函数

strchr是string.h库中的函数&#xff0c;它的形式为&#xff1a; char * strchr (char * str, int character );功能&#xff1a; 返回一个指针&#xff0c;指向字符在 C 字符串 str 中第一次出现的位置。C 字符串末尾的空字符 \0 被视为字符串的一部分。因此&#xff0c;你也可…...

5个实用Babel插件开发案例:从入门到精通转换器实现指南

5个实用Babel插件开发案例&#xff1a;从入门到精通转换器实现指南 【免费下载链接】babel-handbook :blue_book: A guided handbook on how to use Babel and how to create plugins for Babel. 项目地址: https://gitcode.com/gh_mirrors/ba/babel-handbook Babel插件…...

pkrelay:轻量级端口转发工具的设计原理与生产实践

1. 项目概述&#xff1a;一个轻量级、高可用的端口转发与流量中继工具在分布式系统、微服务架构以及混合云部署的日常运维和开发调试中&#xff0c;我们经常会遇到一个经典问题&#xff1a;如何安全、便捷地将一个网络环境中的服务端口&#xff0c;暴露给另一个网络环境访问&am…...

# 软考软件设计师每日精练 | 2026-04-25

&#x1f4dd; 软考软件设计师每日精练 | 2026-04-25&#x1f4c5; 距离2026年5月23日软考还有 28天&#xff01; 今日重点&#xff1a;算法策略辨析 线性规划 知识产权深化 项目管理工具&#x1f3af; 模块一&#xff1a;算法策略辨析&#xff08;必考 ★★★★★&#xff…...