初识网络编程
一、概述
-
地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现
-
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]。你必须使用以下三个过滤器来过滤这些餐馆信息…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
Vue 实例的数据对象详解
Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
从数据报表到决策大脑:AI重构电商决策链条
在传统电商运营中,决策链条往往止步于“数据报表层”:BI工具整合历史数据,生成滞后一周甚至更久的销售分析,运营团队凭经验预判需求。当爆款突然断货、促销库存积压时,企业才惊觉标准化BI的决策时差正成为增长瓶颈。 一…...
