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

网络编程学习一

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中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x1…...

【论文速递】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压缩包&#xff0c;把 “<mysql根目录>/bin” 路径添加到系统环境变量path中命令行执行 mysqld --initialize --console&#xff0c;初始化data目录&#xff08;数据库表文件默认存放在" <mysql安装根目录>/data "目录下&#…...

空间误差分析:统一的应用导向处理(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

【C++】引用、内联函数、auto关键字、范围for、nullptr

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

pytest数据驱动

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

OSI七层网络模型

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

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2022年05月16日&#xff0c;《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文&#xff0c;该…...

Java 日期处理踩过的坑

前言 整理Java日期处理遇到过的问题&#xff0c;希望对大家有帮助 制作不易&#xff0c;一键三连&#xff0c;谢谢大家。 1.用 Calendar 设置时间的坑 反例&#xff1a; //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...

一文吃透 Spring 中的IOC和DI(二)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

【期末指北】嵌入式系统——选择题(feat. ChatGPT)

作者&#xff5c;Rickyの水果摊 时间&#xff5c;2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题&#xff0c;供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成&#xff0c;博主进行审核。 使用教材信息&#xff1a;《嵌入式系统设计与应…...

MyBatis-Plus——代码生成器(3.5.1+版本)

文章目录配置数据源配置&#xff08;DataSource&#xff09;全局配置&#xff08;GlobalConfig&#xff09;包配置&#xff08;PackageConfig&#xff09;策略配置&#xff08;StrategyConfig&#xff09;模板引擎配置&#xff08;TemplateEngine&#xff09;代码生成器测试样例…...

宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》

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

【Linux系统】第七篇:Linux调试器gdb的使用

文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码&#xff08;list&#xff09;4、断点命令&#xff08;breakpoint&#xff09;5 、变量命令&#xff08;variable&#xff09;6、特殊调试命令7、调用…...

Shell 特殊变量及其含义

shell是我们在linux下编写自动执行程序的常见脚本工具&#xff0c;通常会涉及到以下几个特殊变量&#xff0c;它们分别是&#xff1a;$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n&#xff08;n≥1&#xff09;传递给脚本或函数的参数。n 是一个数字&#xff0c;表示…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...