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

初识网络编程

一、概述

  • 地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现

  • 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组件库&#xff0c;在表单上添加了ref属性&#xff0c;方便提交时验证。触发提交方法时显示不存在这个方法或this.$refs为undefined。 <u--form labelPosition"left" :model"userInfo" :rules"rules" ref"loginForm&…...

蜂蜜配送销售商城小程序的作用是什么

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

大数据Flink(八十四):SQL语法的DML:窗口聚合

文章目录 SQL语法的DML:窗口聚合 一、滚动窗口(TUMBLE)...

系统集成|第十八章(笔记)

目录 第十八章 安全管理18.1 信息安全管理18.2 信息系统安全18.3 物理安全管理18.4 人员安全管理18.5 应用该系统安全管理18.6 信息安全等级保护18.7 拓展 上篇&#xff1a;第十七章、变更管理 下篇&#xff1a;第十九章、风险管理 第十八章 安全管理 18.1 信息安全管理 信息安…...

480万商品,如何架构商品治理平台?

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

【C++入门指南】C如何过渡到C++?祖师爷究竟对C++做了什么?

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

简易磁盘自动监控服务

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

【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码

1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块&#xff0c;用于绘制和可视化三维图形&#xff0c;包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…...

十六,镜面IBL--预滤波环境贴图

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

信息安全:恶意代码防范技术原理.

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

开源媒体浏览器Kyoo

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

人脸解锁设备时出现相机报错

&#xff08;1&#xff09;背景分析 这是项目当中实际遇到的问题&#xff0c;如下代码仅用作分析和记录。 现在问题的现象是&#xff1a;刚亮屏大概在2s以内对着人脸一般是能解锁的&#xff0c;但是超过2s之后在对着人脸&#xff0c;是无法解锁成功的。 &#xff08;2&#…...

【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性

在工业生产中&#xff0c;事故的突发性与不可预测性常常带来巨大的损失。传统的应急演练方式往往存在场地限制、成本高、效果难以衡量等问题。然而&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的快速发展&#xff0c;VR工业事故应急救援演练应运而生&#xff0c;为…...

还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)

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

常见应用层协议

一.HTTP&#xff08;超文本传输协议&#xff09; HTTP 和 HTTPS 二.FTP&#xff08;文件传输协议&#xff09; 三.SMTP&#xff08;简单邮件传输协议&#xff09; 四.POP3&#xff08;邮局协议版本3&#xff09; 五.IMAP&#xff08;互联网消息访问协议&#xff09; 六.DNS&am…...

解决docker容器无法关闭的问题

一般正常关闭&#xff1a; docker stop 容器ID解决方法 方法1&#xff1a;强制停止docker kill 容器ID方法2&#xff1a;直接重启dockersudo service docker stop方法3&#xff1a;直接删除容器&#xff0c;重新创建docker rm -f my_container...

2023-09-27 LeetCode每日一题(餐厅过滤器)

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

Termux:X11的10个核心功能解析:触摸手势、键盘切换与多显示器支持

Termux:X11的10个核心功能解析&#xff1a;触摸手势、键盘切换与多显示器支持 【免费下载链接】termux-x11 Termux X11 add-on application. Still in early development. 项目地址: https://gitcode.com/gh_mirrors/te/termux-x11 Termux:X11是一个专为Android设备优化…...

palera1n 开发者贡献指南:如何快速参与iOS越狱项目开发 [特殊字符]

palera1n 开发者贡献指南&#xff1a;如何快速参与iOS越狱项目开发 &#x1f680; 【免费下载链接】palera1n Jailbreak for arm64 devices on iOS 15.0 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n palera1n是一款支持iOS 15.0系统的arm64设备越狱工具…...

【2026年蚂蚁集团暑期实习- 3月29日-开发岗-第二题- 质数合数】(题目+思路+JavaC++Python解析+在线测试)

题目内容 在数论中,质数是大于 $1 $且仅能被 $1 和自身整除的正整数;合数是大于和自身整除的正整数;合数是大于和自身整除的正整数;合数是大于 1$ 且除了 $1 $和自身外还有其他正因子的正整数。 给定一个长度为$ n$ 的数组 { a1,a2,…,ana_1,a_2,…,a_na...

综合能源系统调度这活儿,本质上就是在各种限制条件里找平衡。今天咱们聊点有意思的——当柔性负荷遇上低碳经济,Matlab怎么帮我们玩转这个多目标优化局

基于Matlab考虑柔性负荷的综合能源系统低碳经济优化调度。 采用CPIEX求解器某微网的运行优化情况&#xff0c; 下层优化得出的微网向配电网购电或售电功率&#xff0c;以及各机组的出力 综合考虑运行成本和碳成本&#xff0c;建立总成本最低为优化目标的IES低碳经济调度模型。 …...

网络工程师的日常:一次搞定eNSP中MSTP+VRRP的‘坑’与优化技巧

eNSP实战&#xff1a;MSTPVRRP组网中的典型故障排查与性能调优 凌晨两点&#xff0c;当我在eNSP模拟器中第三次看到"VRRP state transition to Backup"的日志时&#xff0c;咖啡杯已经见底。这个典型的双核心企业网架构本该在半小时内完成配置&#xff0c;却因为MSTP…...

Intel Broadwell处理器选型指南:IBRS、noTSX这些后缀到底该怎么选?

Intel Broadwell处理器选型实战&#xff1a;从安全特性到性能优化的深度解析 在2014年问世的Intel Broadwell架构&#xff0c;作为第五代酷睿处理器的重要里程碑&#xff0c;至今仍在特定应用场景中保持着独特的价值。不同于简单的参数对比&#xff0c;本文将带您深入理解不同…...

OpenClaw+GLM-4.7-Flash:个人博客自动更新系统搭建

OpenClawGLM-4.7-Flash&#xff1a;个人博客自动更新系统搭建 1. 为什么需要自动化博客维护 作为一个技术博主&#xff0c;我每周至少要花3-4小时在博客维护上&#xff1a;构思主题、撰写内容、调整格式、发布更新。最痛苦的不是写作本身&#xff0c;而是那些重复性的机械工作…...

计算机毕设 java 基于 Java+Spring 的疫苗接种管理系统的设计与实现 智能疫苗接种预约系统 疫苗接种全流程管理平台

计算机毕设 java 基于 JavaSpring 的疫苗接种管理系统的设计与实现 69geq9&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享在社会对公共卫生安全愈发重视的背景下&#xff0c;疫苗接种作为重要…...

YOLOv9官方镜像快速入门:三步完成图片检测,支持自定义数据集训练

YOLOv9官方镜像快速入门&#xff1a;三步完成图片检测&#xff0c;支持自定义数据集训练 1. 环境准备与快速部署 YOLOv9官方训练与推理镜像已经预装了完整的深度学习开发环境&#xff0c;包含所有必要的依赖项。这意味着你不需要手动安装Python、CUDA或PyTorch&#xff0c;也…...

白帽 SEO 与网站分析数据的关系是什么

<h3 id"seo">白帽 SEO 与网站分析数据的关系是什么</h3> <p>在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了每个网站提升流量和品牌知名度的关键因素。而在众多的SEO策略中&#xff0c;白帽SEO&#xff08;White…...