网络编程学习一
1、初识网络编程



2、网络编程三要素

3、三要素(IP)

4、IPV4的一些小细节


5、Inetaddress类的使用
package com.leitao.demo.network;import java.net.InetAddress;
import java.net.UnknownHostException;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class IntAddress {public static void main(String[] args) throws UnknownHostException {//1.获取InetAddress的对象//IP的对象 一台电脑的对象InetAddress address = InetAddress.getByName("DESKTOP-C280N7F");System.out.println(address);String hostName = address.getHostName();System.out.println(hostName);String ip = address.getHostAddress();System.out.println(ip);}
}

6、端口号

7、协议



8、UDP协议(发送数据)
package com.leitao.demo.network;import java.io.IOException;
import java.net.*;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class UDPDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)/*** 细节:* 绑定端口,以后我们就是通过这个端口往外发送* 空参:所有可用的端口中随机一个进行使用* 有参:指定端口号进行绑定*/DatagramSocket socket = new DatagramSocket();//2.打包数据String str = "woshinidie!";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port = 10010;DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据socket.send(packet);//4.释放数据socket.close();}
}
9、UDP协议(接收数据)
package com.leitao.demo.network;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class UDPReceiveDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)/*** 细节:* 在接收的时候,一定要绑定端口* 而且绑定的端口,一定要跟发送的端口保持一致*/DatagramSocket datagramSocket = new DatagramSocket(10010);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);/*** receive()该方法是阻塞的* 程序执行到这一步的时候,会在这里死等* 等发送端发送消息*/System.out.println("1111111");datagramSocket.receive(datagramPacket);System.out.println("22222222");//3.解析数据包byte[] data = datagramPacket.getData();int length = datagramPacket.getLength();InetAddress address = datagramPacket.getAddress();int port = datagramPacket.getPort();System.out.println("接受数据到" + new String(data,0,length));System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");//4.释放资源datagramSocket.close();}
}


10、UDP练习(聊天室)

发送端
package com.leitao.demo.network;import java.io.IOException;
import java.net.*;
import java.util.Scanner;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class SendMessageDemo {public static void main(String[] args) throws IOException {//1.创建对象DatagramSocket的对象DatagramSocket ds = new DatagramSocket();//2.打包数据Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入信息:");String str = sc.nextLine();if ("886".equals(str)){break;}byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port = 10010;DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ds.send(dp);}//4.释放资源ds.close();}
}
接收端
package com.leitao.demo.network;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class ReceiveMessageDemo {public static void main(String[] args) throws IOException {//1.创建对象DatagramSocket的对象DatagramSocket ds = new DatagramSocket(10010);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);while (true) {ds.receive(dp);//3.解析数据包byte[] data = dp.getData();int length = dp.getLength();String ip = dp.getAddress().getHostAddress();String name = dp.getAddress().getHostName();//4.打印数据System.out.println("ip为:" + ip + ",主机名为:" + name + "的人,发送了数据:" + new String(data,0,length));}}
}


11、单播、组播、广播

组播:创建MulticastSocket对象
12、TCP协议(发送和接收数据)


客户端
package com.leitao.demo.network;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPSendMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,发送数据//1.创建socket对象/*** 细节:在创建对象的同事会连接服务端* 如果连不上,代码会报错*/Socket socket = new Socket("127.0.0.1", 10010);//2.可以从连接通道中获取输出流OutputStream os = socket.getOutputStream();//写出数据os.write("123aaa".getBytes());//3.释放资源os.close();socket.close();}
}
服务端
package com.leitao.demo.network;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPReceiveMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,接收数据//1.创建对象ServerSocketServerSocket serverSocket = new ServerSocket(10010);//2.监听客户端的连接Socket accept = serverSocket.accept();//3.从连接通道中获取输入流读取数据InputStream inputStream = accept.getInputStream();int b;while ((b = inputStream.read()) != -1) {System.out.println((char) b);}//4.释放资源accept.close();inputStream.close();}
}

13、TCP协议(中文乱码问题)
将字节流转化为字符流即可

package com.leitao.demo.network;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPReceiveMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,接收数据//1.创建对象ServerSocketServerSocket serverSocket = new ServerSocket(10010);//2.监听客户端的连接Socket accept = serverSocket.accept();//3.从连接通道中获取输入流读取数据InputStream inputStream = accept.getInputStream();InputStreamReader isr = new InputStreamReader(inputStream);int b;while ((b = isr.read()) != -1) {System.out.println((char) b);}//4.释放资源accept.close();inputStream.close();}
}
14、TCP协议(代码细节)
15、三次握手和四次挥手


16、综合练习01(多发多送)

Client 客户端
package com.leitao.demo.network.test1;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/16* @Version V1.0**/
public class Client {public static void main(String[] args) throws IOException {//1.创建Socket对象并连接服务端Socket socket = new Socket("127.0.0.1", 10010);//2.写出数据Scanner sc = new Scanner(System.in);OutputStream os = socket.getOutputStream();while (true) {System.out.println("请输入您要发送的信息:");String str = sc.nextLine();if ("886".equals(str)) {break;}os.write(str.getBytes());}//3.释放资源socket.close();}
}
Server 服务器
package com.leitao.demo.network.test1;import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/16* @Version V1.0**/
public class Server {public static void main(String[] args) throws IOException {//1.创建对象绑定10010端口ServerSocket ss = new ServerSocket(10010);//2.等待客户端来连接Socket socket = ss.accept();//3.读取数据InputStreamReader isr = new InputStreamReader(socket.getInputStream());int b;while ((b = isr.read()) != -1) {System.out.print((char) b);}//4.释放资源socket.close();ss.close();}
}
结果


17、综合练习02(接收并反馈)

代码分为两大部分,客服端往服务器发送数据吗,数据的流向要清楚;回写的数据流向也要明白
还需要客户端写一个结束标记,不然客户端read方法会一直等待接收数据

客户端
package com.leitao.demo.network.test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/20* @Version V1.0**/
public class Client {public static void main(String[] args) throws IOException {//1.创建Socket对象并连接服务器Socket socket = new Socket("127.0.0.1",10010);//2.写出数据String str = "你好,我是帅哥";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//写出一个结束标记socket.shutdownOutput();//3.接收服务端回写的数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;while ((b = isr.read()) != -1) {System.out.print((char)b);}//释放资源socket.close();}
}
服务器
package com.leitao.demo.network.test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/20* @Version V1.0**/
public class Server {public static void main(String[] args) throws IOException {//1.创建对象并绑定端口ServerSocket ss = new ServerSocket(10010);//2.等待客户端连接Socket socket = ss.accept();//3.socket 中获取输入流读取数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;/*** 细节:* read方法会从连接通道中读取数据* 但是,需要有一个结束标记,此处的循环才会停止* 否则,程序就会一直停在read方法这里,等待读取接下来的数据*/while ((b = isr.read()) != -1) {System.out.print((char)b);}//4.回写数据String str = "很帅吗";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//释放资源socket.close();ss.close();}
}
18、综合练习03(上传文件)

。。。。。。
相关文章:

网络编程学习一
1、初识网络编程2、网络编程三要素3、三要素(IP)4、IPV4的一些小细节5、Inetaddress类的使用package com.leitao.demo.network;import java.net.InetAddress; import java.net.UnknownHostException;/*** Description: TODO* Author LeiTao* Date 2023/2…...

Javascript 立即执行函数
IIFE,一般称为立即执行函数。你可能会问我,*“嘿!我知道正常的函数表达式是什么样子的,但是 IIFE 到底是什么?”。*好吧,这正是我今天要在本文中回答的问题。 函数表达式 在了解立即调用函数表达式之前,让…...

基于Django和vue的微博用户情感分析系统
完整代码:https://download.csdn.net/download/weixin_55771290/87471350概述这里简单说明一下项目下下来直接跑起的方法。前提先搞好python环境和vue环境,保证你有一个账户密码连上数据库mysql。1、pip install requirements.txt 安装python包2、修改mysql数据库的…...

【C++】IO流
🌈欢迎来到C专栏~~IO流 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤…...

【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练
【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练 【论文原文】:CLEVE: Contrastive Pre-training for Event Extraction 【作者信息】:Wang, Ziqi and Wang, Xiaozhi and Han, Xu and Lin, Yankai and Hou, Lei and Liu, Zhiyuan and Li, Peng and …...

《自动驾驶规划入门》专栏结语
一、 源起 2021年10月12日,化学工业出版社的金编辑根据博客中留下的微信号联系上我,问我有没有出书的想法。从小到大,书与文字在我心里是有着神圣地位的。我在“想试试”与“害怕做不好”这两种矛盾的心情中,还是先应了下来。签了…...

【数据结构与算法】2.八大经典排序
文章目录简介1.分析排序算法2.插入排序2.1.直接插入排序2.2.希尔排序3.选择排序3.1.直接选择排序3.2.堆排序3.2.1.堆的数据结构3.2.2.算法实现4.交换排序4.1.冒泡排序4.2.快速排序5.归并排序6.基数排序7.八大排序算法总结简介 排序对于任何一个程序员来说,可能都不会…...

Windows 免安装版mysql,快速配置教程
简单步骤 下载并解压mysql压缩包,把 “<mysql根目录>/bin” 路径添加到系统环境变量path中命令行执行 mysqld --initialize --console,初始化data目录(数据库表文件默认存放在" <mysql安装根目录>/data "目录下&#…...

空间误差分析:统一的应用导向处理(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

【C++】引用、内联函数、auto关键字、范围for、nullptr
引用什么叫引用引用的特性常引用使用场景传值、传引用效率比较引用和指针的区别内联函数auto关键字(C11)基于范围的for循环(C11)指针空值nullptr(C11)引用 什么叫引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内…...

pytest数据驱动
文章目录一、数据驱动概念二、数据驱动yaml1、yaml的基本语法:2、yaml支持的数据格式:3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…...

OSI七层网络模型
应用层 定义了各种应用协议规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发,自动寻址的功能。 传输层 1、…...

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…...
Java 日期处理踩过的坑
前言 整理Java日期处理遇到过的问题,希望对大家有帮助 制作不易,一键三连,谢谢大家。 1.用 Calendar 设置时间的坑 反例: //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...

一文吃透 Spring 中的IOC和DI(二)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

【期末指北】嵌入式系统——选择题(feat. ChatGPT)
作者|Rickyの水果摊 时间|2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题,供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成,博主进行审核。 使用教材信息:《嵌入式系统设计与应…...

MyBatis-Plus——代码生成器(3.5.1+版本)
文章目录配置数据源配置(DataSource)全局配置(GlobalConfig)包配置(PackageConfig)策略配置(StrategyConfig)模板引擎配置(TemplateEngine)代码生成器测试样例…...

宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
2月1日,国内网络安全行业媒体Freebuf咨询正式发布《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理(SSO、OTP、IDaaS)及边界访问控制&am…...

【Linux系统】第七篇:Linux调试器gdb的使用
文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码(list)4、断点命令(breakpoint)5 、变量命令(variable)6、特殊调试命令7、调用…...
Shell 特殊变量及其含义
shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n(n≥1)传递给脚本或函数的参数。n 是一个数字,表示…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...