JavaSE 网络编程
什么是网络编程
计算机与计算机之间通过网络进行数据传输
两种软件架构

网络编程3要素

IP
IPv4
IPv6



@Testpublic void test01() throws UnknownHostException {
// InetAddress.getByName 可以是名字或ipInetAddress address = InetAddress.getByName("LAPTOP-7IJTG2U2");System.out.println(address);String hostName = address.getHostName();System.out.println(hostName);String ip = address.getHostAddress();System.out.println(ip);}
端口号

协议
OSI参考模型

TCP/IP协议

UDP
发送数据,接收数据
代码
/*54321端口发送数据到12345端口,从12345端口取出数据*/@Testpublic void UDP_Send() throws IOException {//1.创建DatagramSocket对象(快递公司)//空参:绑定随机端口DatagramSocket ds = new DatagramSocket(54321);//2.打包数据byte[] data="测试UDP".getBytes();InetAddress address = InetAddress.getByName("LAPTOP-7IJTG2U2");int port=12345;DatagramPacket dp = new DatagramPacket(data,data.length,address,12345);//发送数据,释放资源ds.send(dp);//向名为“LAPTOP-7IJTG2U2”的计算机的12345端口发送数据ds.close();}@Testpublic void UDP_Receive() throws IOException {//创建DatagramSocket对象,绑定端口12345,因为数据被发送到12345端口DatagramSocket ds = new DatagramSocket(12345);InetAddress address = InetAddress.getByName("LAPTOP-7IJTG2U2");byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes,bytes.length);System.out.println("12345端口等待接收数据中");ds.receive(dp);System.out.println("12345端口接收到数据");byte[] data = dp.getData();String s = new String(data,0,dp.getLength());System.out.println("从ip:"+dp.getAddress()+"的"+dp.getPort()+"端口获取到数据:"+s);}
先运行UDP_Receive,会阻塞在ds.receive ,再运行UDP_Send发送数据
运行结果
12345端口等待接收数据中
12345端口接收到数据
从ip:/192.168.123.1的54321端口获取到数据:测试UDPProcess finished with exit code 0
UDP案例:聊天室
需求

发送(聊天室里面的人)
public class RoomSend {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();Scanner sc = new Scanner(System.in);InetAddress address = InetAddress.getByName("127.0.0.1");int port=12345;while (true){System.out.println("请输入:");String str = sc.next();if("886".equals(str)){break;}byte[] bytes = str.getBytes();DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);ds.send(dp);}ds.close();}
}
接收 (聊天室)
public class RoomReceive {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(12345);byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, 0,bytes.length);while (true){ds.receive(dp);System.out.println(dp.getAddress()+"--"+dp.getPort()+"--"+new String(dp.getData(),0,dp.getLength()));}}
}
允许创建多个RoomSend

测试




TCP

发送数据,接收数据
服务端
public class Server {public static void main(String[] args) throws IOException {//1.创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);//2.监听客户端的链接,没有客户端链接会一直卡在这里,有客户端连接返回socket对象Socket socket = ss.accept();//3.获取输入流,读数据int b;BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));while ((b=br.read())!=-1){System.out.print((char)b);}//4.释放资源br.close();socket.close();//ss.close(); //客户端不关闭}
}
客户端
public class Client {public static void main(String[] args) throws IOException {//1.创建socket对象,连接不到服务器的端口10000会报错Socket socket = new Socket("127.0.0.1", 10000);//2.获取socket对象的输出流,输出数据OutputStream os = socket.getOutputStream();os.write("我测".getBytes());//3.释放资源os.close();socket.close();}
}
TCP的三次握手和四次挥手
三次握手

四次挥手

练习
接收并反馈信息


上传文件
服务端
public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(10000);Socket socket = ss.accept();InputStream is = socket.getInputStream();BufferedInputStream bis = new BufferedInputStream(is);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\java_workspace\\demo3\\src\\main\\java\\com\\example\\upload\\copy.png"));int len;byte[] bytes = new byte[1024];while ((len=bis.read(bytes))!=-1){bos.write(bytes,0,len);}bos.close();bis.close();socket.close();ss.close();System.out.println("传输完成");}
}
客户端
public class Client {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream(new File("D:\\java_workspace\\demo3\\src\\main\\java\\com\\example\\upload\\img.png"));BufferedInputStream bis = new BufferedInputStream(fis);int len;byte[] bytes = new byte[1024];Socket socket = new Socket("127.0.0.1", 10000);OutputStream os = socket.getOutputStream();while ((len= fis.read(bytes))!=-1){os.write(bytes,0,len);}fis.close();socket.shutdownOutput();os.close();socket.close();}
}
上传文件(线程版)
服务端
public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(10000);while (true){Socket socket = ss.accept();new Thread(new MyRunnable(socket)).start();}}
}
public class MyRunnable implements Runnable{private Socket socket;public MyRunnable(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();BufferedInputStream bis = new BufferedInputStream(is);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\java_workspace\\demo3\\src\\main\\java\\com\\example\\upload\\" + UUID.randomUUID().toString().replace("-", "") + ".png"));int len;byte[] bytes = new byte[1024];while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.close();bis.close();socket.close();System.out.println("传输完成");} catch (IOException e) {e.printStackTrace();}}
}
客户端
public class TCPClient {public static void main(String[] args) throws IOException, InterruptedException {FileInputStream fis = new FileInputStream(new File("D:\\java_workspace\\demo3\\src\\main\\java\\com\\example\\upload\\img.png"));BufferedInputStream bis = new BufferedInputStream(fis);int len;byte[] bytes = new byte[1024];Socket socket = new Socket("127.0.0.1", 10000);OutputStream os = socket.getOutputStream();while ((len = fis.read(bytes)) != -1) {os.write(bytes, 0, len);}Thread.sleep(5000);fis.close();socket.shutdownOutput();os.close();socket.close();}
}
上传文件(线程池版)
服务端
public class TCPServer {private static ThreadPoolExecutor myThreadPool = new ThreadPoolExecutor(4,//核心线程数17,//最大线程数1,//空闲线程最大存活时间TimeUnit.MINUTES,//时间单位new ArrayBlockingQueue<>(2),//长度为3的等待队列Executors.defaultThreadFactory(),//创建线程工厂new ThreadPoolExecutor.AbortPolicy()//设置拒绝策略:丢弃任务并抛出异常);public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(10000);while (true){Socket socket = ss.accept();TCPServer.myThreadPool.submit(new MyRunnable(socket));
// new Thread(new MyRunnable(socket)).start();}}
}
客户端和MyRunnable同上
相关文章:
JavaSE 网络编程
什么是网络编程 计算机与计算机之间通过网络进行数据传输 两种软件架构 网络编程3要素 IP IPv4 IPv6 Testpublic void test01() throws UnknownHostException { // InetAddress.getByName 可以是名字或ipInetAddress address InetAddress.getByName("LAPTOP-7I…...
ubuntu24.04 编译安装PHP7.4
ubuntu24.04 编译安装PHP7.4 先安装依赖包(原本是centos上安装依赖,让chatgpt转换了下对应的ubutnu下包名,如果编译过程有缺失,按报错提示再安装下) apt install zlib1g zlib1g-dev libpcre3 libpcre3-dev libfreety…...
Tied and Anchored Stereo Attention Network for Cloud Removal in Optical
论文名称 基于固定锚定立体注意力网络的光学遥感图像去云方法代码运行 论文代码 https://github.com/ningjin00/TASANet?tabreadme-ov-file 论文地址 1环境创建 模型环境给了这几个包,如果你自带环境 那就运行代码 提示缺哪个装哪个 python 3.12rasterio 1.3.10…...
云开发微信小程序--即时聊天(单人聊天,多人聊天室)
云开发微信小程序–即时聊天 介绍:本小程序包含欢迎界面,注册,登录,一对一聊天,群聊,好友添加请求验证过程,修改好友备注以及删除好友,退出群聊,特殊角色卡片展示&#…...
Leetcod编程基础0到1-基础实现内容(个人解法)(笔记)
以下为个人解法,欢迎提供不同思路 1768. 交替合并字符串 题目:给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾&…...
仲阳天王星运维实习一面
自我介绍? 略谈谈你对“仲阳天王星”的理解? 略实习时间怎么安排,后续时间是怎么规划的? 略给你一个装满水的8升满壶和两个分别是5升、3升的空壶,请想个办法,使得其中一个水壶恰好装4升水,每一步…...
排序算法详解
💎所属专栏:数据结构与算法学习 💎 欢迎大家互三:2的n次方_ 🍁1. 插入排序 🍁1.1 直接插入排序 插入排序是一种简单直观的排序算法,它的原理是通过构建有序序列,对于未排序数…...
vxe-table树形结构使用setCheckboxRow卡顿--已解决
项目场景: vxe-table树形结构使用setCheckboxRow进行部分节点选中 问题描述 vxe-table树形结构使用setCheckboxRow,在数据较多时卡顿 原因分析: setCheckboxRow内部进行了多次的循环遍历,导致速度慢 解决方案: 设…...
配置错误和 IAM 弱点是云安全的主要隐患
根据云安全联盟发布的《2024 年云计算最大威胁》报告,通常与云服务提供商 (CSP) 相关的传统云安全问题的重要性正在持续下降。 配置错误、IAM 弱点和 API 风险仍然至关重要 这些发现延续了 2022 年报告中首次发现的轨迹,同时,诸如错误配置的…...
Redis系列之Redis Cluster
概述 Redis 2.8版本发布稳定版Redis Sentinel,不过Sentinel集群版存在一些问题: 高可用性:Sentinel集群对Redis既有的主从集群提供有限的高可用保障;在线扩容:节点下线,触发选举,选举涉及两个…...
网站证书过期导致WordPress后台无法登录问题解决,页面样式丢失
1、首先打开网站目录文件\wp-includes\functions.php,找到代码,应该就是就在在第8行。 require( ABSPATH . WPINC . /option.php ); 在下面添加以下代码,作用就是把http替换为https add_filter(script_loader_src, agnostic_script_loader…...
LeetCode刷题笔记第191题:位1的个数
LeetCode刷题笔记第191题:位1的个数 题目: 想法: 通过位运算判断二级制形式中有多少个1,代码及解释如下: class Solution:def hammingWeight(self, n: int) -> int:return sum(1 for i in range(32) if n & …...
C语言—函数栈帧
函数,一般都有返回值,函数名,参数,再下来还有什么mian函数,函数写出来就是要被调用的,上面图片上的代码,main函数和myadd函数,都要在自己的栈结构什么形成自己的栈,可以帮…...
IDEA 2022.1.4用前需知
目录 一、配置国内源 二、正确再次创建新项目方式 IDEA 2022.1.4下载地址 一、配置国内源 1、查看本地仓库地址 2、设置国内源-添加Setting.xml文件内容 3、修改目录(考虑到当前硬盘空间大小,英文目录名) 1)创建你要移动过去…...
Python数据可视化案例——折线图
目录 json介绍: Pyecharts介绍 安装pyecharts包 构建一个基础的折线图 配置全局配置项 综合案例: 使用工具对数据进行查看 : 数据处理 json介绍: json是一种轻量级的数据交互格式,采用完全独立于编程语言的文…...
Ubuntu虚拟机安装及汉化
一、安装 1.勾选典型(推荐)(T)——点击下一步 2.点击浏览找到光盘映像文件打开(此文件很重要安装好后安装包不要卸载,放在不容易被删除的地方)——点击下一步 3.将信息补充完整——点击下一步 4.点击浏览选择要将虚拟机安装在哪个路径&…...
记2024-08原生微信小程序开发
继2024.08 最近需要开发一个微信小程序的一个功能模块,但是之前在学的时候都是好几年前的东东了,然后重新快速过了一遍b站大学的教程,这篇文章就是基于教程进行的一些总结,和自己开发过程当中使用到的一些点和一些技巧什么的吧。 …...
嵌入式linux系统镜像制作day1
点击上方"蓝字"关注我们 01、前言 嵌入式设备(例如心电图检测仪,售票系统等)。尽管,嵌入式设备像那些智能手机一样,绝大多数都使用同样的硬件和软件,包括系统芯片SoC、储存、连接和多媒体接口、…...
【相机与图像】2. 相机内外参的标定的代码示例
1 摄像头内参的标定 【相机标定具体操作】 使用将要标定的摄像头,以不同的角度采集棋盘格,要保证视野内出现完整的棋盘格。采集图片数量约15张左右即可。 以11*8的棋盘格为例,具体流程如下: step 1. 设置棋盘格3D点;通…...
重启人生计划-拒绝内耗
🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳 如果你觉得这个【重启人生…...
手机也能跑AI?实测3B以下小模型在安卓/iOS端的部署教程(附性能对比)
手机端AI模型实战:3B以下小模型在安卓/iOS的部署与优化指南 当ChatGPT需要数据中心级算力支撑时,你可能没想到自己的手机也能运行类似技术。本文将带你探索移动端AI部署的完整方案——从Termux环境配置到CoreML模型转换,实测Redmi Note 12 Tu…...
如何解决ViPER4Windows兼容性难题?5步打造Windows 10/11音效增强终极方案
如何解决ViPER4Windows兼容性难题?5步打造Windows 10/11音效增强终极方案 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher 副标题&…...
从腾讯AI架构师那里听到的:他们正在重点研究的4个新前沿AI方向
腾讯AI架构师揭秘:当下重点突破的4个前沿AI方向 清晨的深圳滨海大厦会议室里,腾讯AI Lab的架构师张明(化名)放下咖啡杯,翻开电脑里的项目进度表——屏幕上跳动的图表里,“MoE轻量化” “多模态因果推理” “…...
告别直播回放获取难题!用douyin-downloader实现高效内容管理的3个创新方法
告别直播回放获取难题!用douyin-downloader实现高效内容管理的3个创新方法 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and bro…...
从零搭建像素剧本工作站:Pixel Script Temple镜像免配置快速上手指南
从零搭建像素剧本工作站:Pixel Script Temple镜像免配置快速上手指南 1. 认识像素剧本圣殿 Pixel Script Temple是一款专为剧本创作者设计的AI辅助工具,它基于强大的Qwen2.5-14B-Instruct模型深度优化,特别适合需要频繁创作剧本、小说或叙事…...
基于Qwen3-ASR的智能会议纪要系统:从语音识别到文本摘要全流程
基于Qwen3-ASR的智能会议纪要系统:从语音识别到文本摘要全流程 1. 系统整体效果展示 今天给大家展示一个基于Qwen3-ASR-1.7B语音识别模型构建的智能会议纪要系统。这个系统不仅能准确识别会议中的语音内容,还能自动区分不同说话人,提取关键…...
QMCDecode:3分钟快速解锁QQ音乐加密文件,实现跨平台音乐自由
QMCDecode:3分钟快速解锁QQ音乐加密文件,实现跨平台音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录…...
VideoAgentTrek-ScreenFilter模型压缩与量化教程:在边缘设备上实现轻量部署
VideoAgentTrek-ScreenFilter模型压缩与量化教程:在边缘设备上实现轻量部署 想让一个原本需要强大GPU才能流畅运行的视频分析模型,在树莓派或者Jetson Nano这类小巧的边缘设备上也能跑起来吗?这听起来像是个不可能的任务,但通过模…...
精准定位CPU核心稳定性:CoreCycler单核心测试全指南
精准定位CPU核心稳定性:CoreCycler单核心测试全指南 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/gh…...
3分钟搞定百度网盘提取码!这款免费神器让你告别繁琐搜索
3分钟搞定百度网盘提取码!这款免费神器让你告别繁琐搜索 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘资源提取码而烦恼吗?每次遇到需要密码的分享链接,你是不是都要在评论…...
