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

news2024/11/15 17:31:31

目录

一、什么是网络编程

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】

待补充~

实现效果:

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

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

相关文章

【项目实战】基于netty-websocket-spring-boot-starter实现WebSocket服务器长链接处理

一、背景 项目中需要建立客户端与服务端之间的长链接,首先就考虑用WebSocket,再来SpringBoot原来整合WebSocket方式并不高效,因此找到了netty-websocket-spring-boot-starter 这款脚手架,它能让我们在SpringBoot中使用Netty来开发…

进程和进程的调度

今天,为大家带来进程和进程的调度的学习 1.认识计算机 2.什么是操作系统 3.什么是进程 4.进程管理 5.进程的属性 6.进程的调度 7.进程调度的过程 8.内存分配 1.认识计算机 计算机的组成有五大部分 1.CPU(是计算机的大脑,负责逻辑运算和控制) 2.内存 3.外存 4.输入…

你了解线程的状态转换吗

本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…

项目实战-瑞吉外卖day02(B站)持续更新

瑞吉外卖-Day02课程内容完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息1. 完善登录功能1.1 问题分析前面我们已经完成了后台系统的员工登录功能开发,但是目前还存在一个问题,接下来我们来说明一个这个问题, 以及如何处理…

前端实用技巧,JS压缩、美化、JS混淆加密

作为一名前端开发者,关注JavaScript代码的安全性和隐私性,或者需要对JavaScript代码进行美化、格式化、压缩等操作,帮助你提高开发效率和代码质量,利用一个好的工具非常重要。 如果不想让自己的代码被恶意篡改和盗用,作…

超详细Xshell7免费版安装与连接虚拟机教程

一、下载Xshell 1、首先打开Xshell官网,首页官网地址为: Xshell官网首页地址 官网首页地址有时候会发生变动,若不能通过链接直接进入官网,则在浏览器搜索xshell---->点击下图所示红框处即可 2、进入首页后,点击免…

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

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

计算机网络之HTTP协议

目录 一、HTTP的含义 1.1 理解超文本 1.2 理解应用层协议 1.3 理解HTTP协议的工作过程 二、HTTP协议格式 2.1 抓包工具的使用 2.2 理解协议格式 2.2.1 请求协议格式 2.2.2. 响应格式请求 一、HTTP的含义 HTTP(全称为“超文本传输协议”)&#x…

WAMP搭建靶场

WAMP W:windows A:apache M:mysql,mariadb P:php 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) 2. 安装phpstudy 默认安装即可 3. 下载DVWA靶场 https://github.com/digininja/DVWA/archive/…

C++回顾(十五)—— 类模板

15.1 为什么要有类模板 类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含的元素类型的影响 15.2 单个类模板语法 注意:类模板的创建对象一定要显示调用(指明类型…

虹科分享 | 网络安全评级 | 突破能够让您变得更加强大

有两种CISO:入侵前和入侵后。入侵前的CISOs过于关注工具,并考虑投资于预防技术。在这样做的时候,他们几乎没有考虑一旦发生了不好的事情,恢复和及时恢复服务的问题。不好的事情会发生;这不是是否的问题,而是…

手把手教你如何做数据报表

数据报表是一种数据可视化形式,它将复杂的数据信息通过图形、表格等形式进行展示和解释,让人们更加直观地理解和分析数据。数据报表已成为现代企业决策的必备工具之一。对企业来说,数据报表有很多用处。首先,数据报表可以帮助企业…

基于BiLSTM+CRF医学病例命名实体识别项目

研究背景 为通过项目实战增加对命名实体识别的认识,本文找到中科院软件所刘焕勇老师在github上的开源项目,中文电子病例命名实体识别项目MedicalNamedEntityRecognition。对其进行详细解读。 原项目地址:https://github.com/liuhuanyong/Med…

一小时轻松掌握Git,看这一篇就足够

文章目录序言:版本控制分类一、Git环境配置下载卸载安装二、常用linux命令三、基本配置四、Git基本操作0.原理图1.项目创建及克隆方式一:本地仓库搭建方式二:克隆远程仓库2.文件操作3.配置ssh公钥4.分支5.push代码参考序言:版本控…

ORB_SLAM2+kinect稠密建图

下载代码:https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map 运行代码: 解压代码后,删掉作者自己编译的build文件夹(下面三个都删除): ~/ORB_SLAM2_modified/build, ~/ORB_SLAM2_modified/T…

【上传项目代码到Git详细步骤】

1.下载安装Git到电脑上(这里我之前已经安装好了,就不细说了)2.进入控制台安装好后右键点击桌面空白部分会多出两个菜单选项,点击第二个Git Bash Here(点击第一个你会爆炸)会弹出一个git控制台,如…

华为OD机试用Python实现 -【分解质因数】 2023Q1A

华为OD机试题 本篇题目:分解质因数题目示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南

从0-1搭建交付型项目管理体系流程(上)【宝芝林2】

很多项目经理在这个阶段,由于经验不足及整个项目管理体系涉及的环节和内容比较庞杂,往往无法有效思考,无从下手。笔者有幸在最近几年的工作实践中,实际搭建并迭代了2-3次项目管理体系流程框架,期间也经历过很多迷茫&am…

C++基础了解-21-C++ 继承

C 继承 一、C 继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 当创建一个类时,不需要重新编写新的…

mes系统如何管理企业生产

随着市场竞争的日趋激烈,很多企业都开始意识到生产管理的重要性。mes系统如何管理企业生产?下面,我们通过一个实例来说明。 案例简介: 一、客户需求快速增长 随着市场竞争的加剧,越来越多的客户提出了个性化需求。同…