初识网络编程
一、概述
-
地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现
-
TCP和UDP:
-
TCP:打电话 -->连接 -->接了 -->通话
-
UDP:发送完即可 -->接收
-
-
计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
-
网络编程的目的:无线电台...传播交流信息,数据交换,通信
-
想要达到这个效果需要什么:
-
如何准确的定位网络上的一台主机 IP+:+端口,定位到这个计算机上的某个资源
-
找到了这个主机,如何传输数据呢
-
javaweb : 网页编程 B/S
网络编程:TCP/IP C/S
二、网络通信的要素
如何实现网络的通信:
通信双方地址:
-
IP
-
端口号
规则:网络通信的协议
http,ftp,smtp,tcp,udp...
TCP/IP参考模型:
小结:
-
网络编程中有两个主要的问题:
-
如何准确定位到网络上的一台或者多台主机
-
找到主机之后如何进行通信
-
-
网络编程中的要素
-
IP和端口号 IP
-
网络通信写协议 UDP TCP
-
-
万物皆对象
三、IP
ip地址:InetAddress
-
唯一定义一台网络上计算机
-
127.0.0.1:本机localhost
-
ip地址的分类
-
IP地址分类 ipv4/ipv6
-
ipv4 127.0.0.1 由四个字节组成,0~255,可有42亿个,30亿都在北美,亚洲4亿,2011年就用尽
-
ipv6 fe80::915d:470e:d522:4339%16 128位,8个无符号整数
-
-
公网(互联网)·私网(局域网)
-
192.168.xx.xx 专门给组织内部使用的
-
ABCD类地址
-
-
-
域名:记忆IP问题
-
IP:www.vip.com www.baidu.com
-
//测试IP public class TestInetAddress {public static void main(String[] args) {try {//查询本机地址InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");System.out.println(inetAddress1);InetAddress inetAddress3 = InetAddress.getByName("localhost");System.out.println(inetAddress3);InetAddress inetAddress4 = InetAddress.getLocalHost();System.out.println(inetAddress4); System.out.println("=============");//查询网站ip地址InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");System.out.println(inetAddress2); //常用方法System.out.println(inetAddress2.getAddress());System.out.println(inetAddress2.getCanonicalHostName());//规范的名字System.out.println(inetAddress2.getHostAddress());//ipSystem.out.println(inetAddress2.getHostName());//域名,或者自己电脑的名字} catch (UnknownHostException e) {throw new RuntimeException(e);}} }
四、端口
端口表示计算机上的一个程序的进程
-
不同的进程有不同的端口号,用来区分软件
-
被规定0~65535
-
TCP,UDP:65535*2 单个协议下端口号不能冲突
-
端口分类
-
公有端口:0~1023
-
HTTP : 80
-
HTTPS : 443
-
FTP : 21
-
SSH : 22
-
Telent:23
-
-
程序注册端口:1024~49151,分配用户或者程序
-
Tomcat:8080
-
MySQL:3306
-
Oracle:1521
-
-
动态、私有:49152~65535
-
netstat -ano #查看所有的端口 netstat -ano|findstr "5900" #查看指定的端口 tasklist|fiindstr "8696" #查看指定端口的进程 ctrl+shift+esc #打开任务管理器
public class TestInetSocketAddress {public static void main(String[] args) {InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);System.out.println(inetSocketAddress);InetSocketAddress inetSocketAddress2 = new InetSocketAddress("localhost", 8080);System.out.println(inetSocketAddress2); System.out.println(inetSocketAddress.getAddress());System.out.println(inetSocketAddress.getHostName());//地址System.out.println(inetSocketAddress.getPort());//端口} }
五、通信协议
协议:约定,就好比我们现在说的是普通话
网络通信协议:速率,传输码率,代码结构,传输控制
问题:非常的复杂
TCP/IP协议簇:实际上是一组协议
重要:
-
TCP:用户传输协议
-
UDP:用户数据报协议
出名的协议
-
TCP:用户传输协议
-
IP:网络互联协议
TCP和UDP的对比:
-
TCP:打电话
-
连接,稳定
-
三次握手,四次挥手
最少需要三次,保证稳定连接 A:你瞅啥? B:瞅你咋地? A:干一场! A:我要走了 B:你真的要走了吗? B:你真的真的要走了吗? A:我真的真的要走了
-
客户端、服务端
-
传输完成,释放连接,效率低
-
-
UDP:发短信
-
不连接,不稳定
-
客户端、服务端:没有明确的界限
-
不管有没有准备好,都可以发给你
-
导弹
-
DDOS:洪水攻击!
-
六、TCP
客户端
-
连接服务器Socket
-
发送消息
服务器
-
建立服务的端口 ServerSocket
-
等待用户的链接 accept
-
接受用户的消息
package day01; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /*** @Author: Grace* @Date: 2023/9/27 18:41* @Description:*/ //服务端 public class TcpServerDemo01 {public static void main(String[] args) {ServerSocket serverSocket =null;ByteArrayOutputStream byteArrayOutputStream = null;InputStream inputStream=null;Socket accept=null; try {//1.我得有一个地址serverSocket = new ServerSocket(9999);//2.等待客户端连接过来while(true) {accept = serverSocket.accept();inputStream = accept.getInputStream();/* byte[] bytes = new byte[1024];int len;while((len= inputStream.read(bytes))!=-1){String s = new String(bytes, 0, len);System.out.println(s);}*///管道流byteArrayOutputStream = new ByteArrayOutputStream();byte[] bytes = new byte[1024];int len;while ((len = inputStream.read(bytes)) != -1) {byteArrayOutputStream.write(bytes, 0, len);} System.out.println(byteArrayOutputStream.toString());}} catch (IOException e) {throw new RuntimeException(e);} finally {if(byteArrayOutputStream!=null) {try {byteArrayOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}if(inputStream!=null){try {inputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}if(accept!=null){try {accept.close();} catch (IOException e) {throw new RuntimeException(e);}}if(serverSocket!=null){try {serverSocket.close();} catch (IOException e) {throw new RuntimeException(e);}} }} }
package day01; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /*** @Author: Grace* @Date: 2023/9/27 18:41* @Description:*/ //客户端 public class TcpClientDemo01 {public static void main(String[] args) {Socket socket =null;OutputStream os =null;try {//1.要知道服务器的地址InetAddress serverIP = InetAddress.getByName("127.0.0.1");int port = 9999;//2.创建一个socket连接socket = new Socket(serverIP,port);//3.发送消息IO流os = socket.getOutputStream();os.write("你好铁锤".getBytes());} catch (Exception e) {throw new RuntimeException(e);} finally {if(socket!=null){try {socket.close();} catch (IOException e) {throw new RuntimeException(e);}}if (os!=null){try {os.close();} catch (IOException e) {throw new RuntimeException(e);}}}} }
七、TCP文件上传
public class TcpClientDemo02 {public static void main(String[] args) throws Exception {//1.建立一个Socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);//2.创建一个输出流OutputStream os = socket.getOutputStream();//3.读取文件FileInputStream fis = new FileInputStream(new File("紫萍.jpg"));//4。写出文件byte[] bytes = new byte[1024];int len;while ((len = fis.read(bytes))!=-1){os.write(bytes,0,len);} //5.关闭资源fis.close();os.close();socket.close(); } }
package day01; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /*** @Author: Grace* @Date: 2023/9/27 19:14* @Description:*/ public class TcpServerDemo02 {public static void main(String[] args) throws Exception {//1.创建服务ServerSocket serverSocket = new ServerSocket(9000);//2.监听客户端的连接Socket accept = serverSocket.accept();//阻塞式监听,会一直等待客户端连接//3.获取输入流InputStream is = accept.getInputStream();//4.文件输出FileOutputStream fos = new FileOutputStream(new File("receive"));byte[] bytes = new byte[1024];int len;while((len = is.read(bytes))!=-1){fos.write(bytes,0,len);}//5.关闭资源fos.close();is.close();accept.close();serverSocket.close();} }
相关文章:

初识网络编程
一、概述 地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现 TCP和UDP: TCP:打电话 -->连接 -->接了 -->通话 UDP:发送完即可 -->接收 计算机网络&a…...

轻松使用androidstudio交叉编译libredwg库
对于安卓或嵌入式开发者而言,交叉编译是再熟悉不过的操作了,可是对于一些刚入门或初级开发者经常会遇到这样的问题:如何交叉编译C++库来生成安卓下的so库呢? 最近有一些粉丝找到我求救,那么我最近刚好有空大致研究了下,帮他们成功编译了其中一个libredwg的C++库,这篇文章…...

【C++杂货铺】一颗具有搜索功能的二叉树
文章目录 一、二叉搜索树概念二、二叉搜索树的操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除 三、二叉搜索树的实现3.1 BinarySearchTreeNode(结点类)3.2 BinarySearchTree(二叉搜索树类)3.2.1 框架3.2.2 in…...

uni-app使用vue3,在元素或组件实例上添加ref,用this.$refs显示undefined
项目中引用了一个UI组件库,在表单上添加了ref属性,方便提交时验证。触发提交方法时显示不存在这个方法或this.$refs为undefined。 <u--form labelPosition"left" :model"userInfo" :rules"rules" ref"loginForm&…...

蜂蜜配送销售商城小程序的作用是什么
蜂蜜是农产品中重要的一个类目,其受众之广市场需求量大,但由于非人人必需品,因此传统线下门店经营也面临着痛点,线上入驻平台也有很多限制难以打造自有品牌,无法管理销售商品及会员、营销等,缺少自营渠道&a…...

大数据Flink(八十四):SQL语法的DML:窗口聚合
文章目录 SQL语法的DML:窗口聚合 一、滚动窗口(TUMBLE)...

系统集成|第十八章(笔记)
目录 第十八章 安全管理18.1 信息安全管理18.2 信息系统安全18.3 物理安全管理18.4 人员安全管理18.5 应用该系统安全管理18.6 信息安全等级保护18.7 拓展 上篇:第十七章、变更管理 下篇:第十九章、风险管理 第十八章 安全管理 18.1 信息安全管理 信息安…...

480万商品,如何架构商品治理平台?
说在前面 在40岁老架构师 尼恩的读者交流群(50)中,很多小伙伴拿高薪,完成架构的升级,进入架构师赛道,打开薪酬天花板。 最近有小伙伴拿到了一线互联网企业如京东、网易、微博、阿里、汽车之家、极兔、有赞、希音、百度、滴滴的架…...

【C++入门指南】C如何过渡到C++?祖师爷究竟对C++做了什么?
【C入门指南】C如何过渡到C?祖师爷究竟对C做了什么? 前言一、命名空间1.1 命名空间的定义1.2 命名空间使用 二、C输入、输出2.1 std命名空间的使用惯例 三、缺省参数3.1 缺省参数的定义3.2 缺省参数分类 四、函数重载4.1 函数重载概念4.2 C支持函数重载的…...

简易磁盘自动监控服务
本文旨在利用crontab定时任务(脚本请参考附件)来监控单个服务节点上所有磁盘使用情况,一旦超过既定阈值则会通过邮件形式告警相关利益人及时介入处理。 1. 开启SMTP服务 为了能够成功接收告警信息,需要邮件接收客户都安开启SMTP服务。简要流程请参考下…...

【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…...

十六,镜面IBL--预滤波环境贴图
又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分,镜面反射。 其中 这里很棘手,与输入wi和输出w0都有关系,所以,再近似 其中第一部分,就是预滤波环境贴图,形式上与前面的辐照度图很相似&#…...

信息安全:恶意代码防范技术原理.
信息安全:恶意代码防范技术原理. 恶意代码的英文是 Malicious Code, 它是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。 目录: 恶意代码概述: (1&a…...

开源媒体浏览器Kyoo
什么是 Kyoo ? Kyoo 是一款开源媒体浏览器,可让您流式传输电影、电视节目或动漫。它是 Plex、Emby 或 Jellyfin 的替代品。Kyoo 是从头开始创建的,它不是一个分叉。一切都将永远是免费和开源的。 软件特性: 管理您的电影、电视剧…...

人脸解锁设备时出现相机报错
(1)背景分析 这是项目当中实际遇到的问题,如下代码仅用作分析和记录。 现在问题的现象是:刚亮屏大概在2s以内对着人脸一般是能解锁的,但是超过2s之后在对着人脸,是无法解锁成功的。 (2&#…...

【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性
在工业生产中,事故的突发性与不可预测性常常带来巨大的损失。传统的应急演练方式往往存在场地限制、成本高、效果难以衡量等问题。然而,随着虚拟现实(VR)技术的快速发展,VR工业事故应急救援演练应运而生,为…...

还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)
续接上文:还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(一) 1.数据治理工程师 工作职责 数据治理工程师的工作职责主要包括以下几个方面: 1. 数据管理策略制定:制定和实施数据管理策略&#…...

常见应用层协议
一.HTTP(超文本传输协议) HTTP 和 HTTPS 二.FTP(文件传输协议) 三.SMTP(简单邮件传输协议) 四.POP3(邮局协议版本3) 五.IMAP(互联网消息访问协议) 六.DNS&am…...

解决docker容器无法关闭的问题
一般正常关闭: docker stop 容器ID解决方法 方法1:强制停止docker kill 容器ID方法2:直接重启dockersudo service docker stop方法3:直接删除容器,重新创建docker rm -f my_container...

2023-09-27 LeetCode每日一题(餐厅过滤器)
2023-09-27每日一题 一、题目编号 1333. 餐厅过滤器二、题目链接 点击跳转到题目位置 三、题目描述 给你一个餐馆信息数组 restaurants,其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息…...

梯度下降法(SGD)原理
目录 梯度下降法(SGD)原理:求偏导 1. 梯度(在数学上的定义) 2. 梯度下降法迭代步骤 BGD批量梯度下降算法 BGD、SGD在工程选择上的tricks 梯度下降法(SGD)原理:求偏导 1. 梯度(在数学上的定义) 表示某一函数在该点处的方向导数沿着该方向取得最大值…...

QQ表情包存储位置解析
一些常见的设备和系统的QQ表情包存储位置: Windows系统: 路径:C:\Users[用户名]\Documents\Tencent Files[QQ号码]\Image\Image\CustomFace 在这个文件夹中,您可以找到所有自定义的QQ表情包。 Android系统: 路径&am…...

软件架构的演化和维护
软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。...

C语言数组和指针笔试题(四)(一定要看)
目录 二维数组例题一例题二例题三例题四例题五例题六例题七例题八例题九例题十例题十一 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 🥸🥸🥸C语言 🐿️…...

FragmentManager is already executing transactions
本文解决问题: java.lang.IllegalStateException: FragmentManager is already executing transactions 问题背景描述: 在Fragment中 用tablayoutviewpagerfragment,即Fragment嵌套Fragment场景、或者ViewPager2嵌套ViewPager2时。 执行生命…...

Matlab中clear,close all,clc功能详细说明
背景: 我们在写matlab程序时,首行总是先敲入:clear; close all; clc;,但你真的知道这三句话的具体作用嘛,下面进行详细说明和演示。 一、clear的功能 clear的功能:清理工作区变量,不清理前是…...

Typora安装无需破解免费使用
Typora简介: 在介绍Typora软件之前,需要先介绍一下MARKDOWN。 MARKDOWN是一种轻量型标记语言,它具有“极简主义”、高效、清晰、易读、易写、易更改纯文本的特点。 Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、…...

LuatOS-SOC接口文档(air780E)--errDump - 错误上报
示例 -- 基本用法, 10分钟上报一次,如果有的话 if errDump thenerrDump.config(true, 600) end-- 附开源服务器端: https://gitee.com/openLuat/luatos-devlogerrDump.dump(zbuff, type, isDelete) 手动读取异常日志,主要用于用户将日志发送给自己的服务器而不是I…...

低代码平台如何助力国内企业数字化转型?
数字化是什么 数字化(Digitalization)是将许多复杂多变的信息转变为可以度量的数字、数据,再以这些数字、数据建立起适当的数字化模型,把它们转变为一系列二进制代码,引入计算机内部,进行统一处理…...

SI3262—高度集成的低功耗SOC芯片
Si3262是一款高度集成的低功耗SOC芯片,其集成了基于RISC-V核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 MCU模块具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等…...