网络编程学习一
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 是一个数字,表示…...
圣女司幼幽-造相Z-Turbo赋能微信小程序开发:AI绘图功能集成案例
圣女司幼幽-造相Z-Turbo赋能微信小程序开发:AI绘图功能集成案例 最近在做一个挺有意思的小项目,朋友想给他的文创小店做个微信小程序,核心功能是让用户输入一段文字描述,就能生成一张独一无二的插画。这需求听起来很酷࿰…...
BGE-Large-Zh效果可视化:向量维度投影图+相似度分布直方图双模展示
BGE-Large-Zh效果可视化:向量维度投影图相似度分布直方图双模展示 1. 项目概述 BGE-Large-Zh是一款专为中文语义理解设计的本地化向量化工具,基于BAAI的bge-large-zh-v1.5模型开发。这个工具能够将中文文本转换为1024维的语义向量,并通过计…...
S2-Pro代码解释器效果展示:理解并调试复杂C语言程序
S2-Pro代码解释器效果展示:理解并调试复杂C语言程序 1. 效果亮点开场 最近在测试S2-Pro的代码解释能力时,遇到了一段让我印象深刻的C语言代码。这段代码涉及指针操作、动态内存分配和复杂逻辑判断,即使是经验丰富的开发者也需要花些时间才能…...
WiFi密码安全测试:如何用hashcat的掩码模式快速爆破简单密码?
WiFi密码安全测试:hashcat掩码模式的高效爆破策略 在网络安全评估中,WiFi密码强度测试是基础但关键的一环。传统字典攻击虽然简单直接,但面对特定密码模式时效率低下。本文将深入探讨如何利用hashcat的掩码模式(Mask Attack&#…...
标题诊断报告如何与其他 SEO 数据结合分析
标题诊断报告在SEO中的重要性 在当今的数字营销世界中,标题诊断报告是每一个SEO优化者都必须了解和运用的工具。标题不仅是吸引用户点击的关键因素,也是搜索引擎评估页面相关性的重要元素。掌握如何有效利用标题诊断报告,可以帮助你提高网站…...
别再只会‘永不在此停止’了!实战绕过网站JS混淆与内存爆破的三种硬核方法
实战突破:三种硬核方法破解JS混淆与内存爆破 打开开发者工具的那一刻,页面突然卡死,控制台不断弹出debugger断点——这可能是每个爬虫工程师都经历过的噩梦。当简单的"永不在此停止"失效时,我们需要更高级的技术手段来应…...
Open Interpreter实时代码预览:沙箱模式部署详细说明
Open Interpreter实时代码预览:沙箱模式部署详细说明 1. 项目概述 Open Interpreter 是一个让人眼前一亮的开源工具,它能让你用平常说话的方式告诉AI要做什么,然后AI就会在你的电脑上直接写代码、运行代码,甚至帮你修改代码。想…...
GTE-Chinese-Large GPU加速部署:CUDA 12.1 + PyTorch 2.3兼容性验证教程
GTE-Chinese-Large GPU加速部署:CUDA 12.1 PyTorch 2.3兼容性验证教程 1. 教程概述 1.1 学习目标 通过本教程,你将学会如何在支持CUDA 12.1和PyTorch 2.3的环境中,快速部署GTE-Chinese-Large文本向量模型,并验证其GPU加速效果…...
高性能队列Disruptor:从原理到实战的完整指南
高性能队列Disruptor:从原理到实战的完整指南 【免费下载链接】blog_demos CSDN博客专家程序员欣宸的github,这里有六百多篇原创文章的详细分类和汇总,以及对应的源码,内容涉及Java、Docker、Kubernetes、DevOPS等方面 项目地址…...
OpenClaw配置备份指南:gemma-3-12b-it模型迁移与快速恢复
OpenClaw配置备份指南:gemma-3-12b-it模型迁移与快速恢复 1. 为什么需要备份OpenClaw配置? 上周我的主力开发机突然硬盘故障,导致精心调校的OpenClaw配置全部丢失。整整两天时间,我都在重新配置模型参数、飞书通道和自定义技能—…...
