socket网络编程-TC/IP方式
网络编程
1.概念:两台设备之间通过网络数据传输。
2.网络通信:将数据通过网络从一台设备传输另外一台设备。
3.java.net包下提供了一系列的类和接口,提供程序员使用,完成网络通信。

TCP和UDP
TCP协议:
1.使用TCP协议前,需建立TCP连接,形成传输数据通道。
2.传输前,采用“三次握手”方式,是可靠的。
3.TCP协议进行通信的两个应用进程:客户端、服务端。
4.在连接中可进行大数据量的传输。
UDP协议:
1.将数据、源、目的封装成数据包,不需要建立连接
2.每个数据报的大小限制在64Kb内
3.因无需连接,故是不可靠的
4.发送数据结束时无需释放资源,速度快。
5.举例:发短信
介绍java.net中的工具类

Socket介绍
1.套接字(Socket)开发网络应用程序被广泛,以至于成为事实上的标准。
2.通信额两端都要有Socket,是两台机器通信的端点。
3.网络通信其实是Socket间的通信。
4.Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
5.一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端。

当我们需要通讯时(读写数据),客户端和服务端分别使用以下两个方法。
1.socket.getOutputSream()
2.socket.getInputStream()

Socket有TCP编程和UDP编程。
TCP网络通信编程的案例
要求:
1.编写一个服务器端和客户端。
2.服务器端在9999端口监听。
3.客户端连接到服务器,发送“Hello server”,然后退出。
4.服务器端接受到客户端发送的信息,输出,并退出。
思路

代码实现,客户端如下:
import java.io.IOException;
import java.io.OutputStream;
import java.net.*;public class SocketClientTCP01 {public static void main(String[] args) {try {// 思路// 1.连接服务端// 解读:连接本机的9999,如果连接成功,返回socket对象Socket socket = new Socket(InetAddress.getLocalHost(), 9999);System.out.print("服务 socket = " + socket.getClass());// 2. 连接上后,生成Socket,通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象 OutputStream outputStream = socket.getOutputStream();// 3.通过输出流,写入数据到据通道outputStream.write("hello , server ".getBytes());// 4. 关闭流outputStream.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
服务端如下:
import java.io.IOException;
import java.io.InputStream;
import java.net.*;
public class SocketServerTCP01 {public static void main(String[] args) {try {// 1.在本机的9999端口监听,等待连接//细节:一台主机只能有重复的端口存在//细节:ServerSocket可以通过accept()返回多个Socket[多个客户端]ServerSocket serverSocket = new ServerSocket(9999);System.out.print("我在9999端口等待监听,等待连接");// 2.当没有客户端连接9999端口时,程序会阻塞,等待连接//如果有客户端连接,则会返回Socket对象,程序继续Socket socket = serverSocket.accept();System.out.print("服务端 socket = " + socket.getClass());// 3.通过socket.getInputStream(),读取客户端写入到数据通道的数据,显示InputStream input = socket.getInputStream();// 4.读取IO相关byte [] buf = new byte[1024];int readLen = 0 ; while((readLen = input.read(buf)) != -1) {//根据读取到的实际长度,显示内容System.out.print(new String(buf , 0 , readLen));}input.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}
案例,服务端与客户端相互发送

其中服务端 代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SocketTCP02Server {public static void main(String[] args) {try {// 1.在本机的9999端口监听,等待连接//细节:一台主机只能有重复的端口存在//细节:ServerSocket可以通过accept()返回多个Socket[多个客户端]ServerSocket serverSocket = new ServerSocket(9999);System.out.print("我在9999端口等待监听,等待连接 \n");// 2.当没有客户端连接9999端口时,程序会阻塞,等待连接//如果有客户端连接,则会返回Socket对象,程序继续Socket socket = serverSocket.accept();System.out.print("服务端 socket = " + socket.getClass() + "\n");// 3.通过socket.getInputStream(),读取客户端写入到数据通道的数据,显示InputStream input = socket.getInputStream();// 4.读取IO相关byte [] buf = new byte[1024];int readLen = 0 ;while((readLen = input.read(buf)) != -1) {//根据读取到的实际长度,显示内容System.out.print(new String(buf , 0 , readLen));}// 获取socket相关的输出流OutputStream outputStream = socket.getOutputStream();outputStream.write("hello , client ".getBytes());socket.shutdownOutput();//关闭资源input.close();socket.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}
}
客户端程序为:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketTCP02Client {public static void main(String[] args) {try {// 思路// 1.连接服务端// 解读:连接本机的9999,如果连接成功,返回socket对象Socket socket = new Socket(InetAddress.getLocalHost(), 9999);System.out.print("服务 socket = " + socket.getClass() + "\n");// 2. 连接上后,生成Socket,通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象OutputStream outputStream = socket.getOutputStream();// 3.通过输出流,写入数据到据通道outputStream.write("hello , server ".getBytes());//发送结束标志 半双工吗?socket.shutdownOutput();//4.获取和socket关联的输入流,读取数据(byte),并显示InputStream inputStream = socket.getInputStream();// 4.读取IO相关byte [] buf = new byte[1024];int readLen = 0 ;while((readLen = inputStream.read(buf)) != -1) {//根据读取到的实际长度,显示内容System.out.print(new String(buf , 0 , readLen));}// 5. 关闭流inputStream.close();outputStream.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}相关文章:
socket网络编程-TC/IP方式
网络编程 1.概念:两台设备之间通过网络数据传输。 2.网络通信:将数据通过网络从一台设备传输另外一台设备。 3.java.net包下提供了一系列的类和接口,提供程序员使用,完成网络通信。 TCP和UDP TCP协议: 1.使用TCP协…...
《分布式光纤测温:解锁楼宇安全的 “高精度密码”》
在楼宇建筑中,因其内部空间庞大,各类电器设施众多,如何以一种既高效又稳定,兼具低成本与高覆盖特性的方式,为那些关键线路节点开展温度监测,是目前在安全监测领域一项重点研究项目,而无锡布里渊…...
C语言基本知识复习浓缩版:数组
所谓数组(Array),就是一系列数据的集合。这些数据具有相同的类型,并且在内存中挨着存放,彼此之间没有缝隙。换句话说,数组用来存放多份数据,但是它有两个要求: 这些数据的类型必须相…...
Python贪心
贪心 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤核心性质:每次采用局部最优,最终结果就是全局最优如果题目满足上述核心性质…...
rk3568 内核态OOM内存泄漏kmemleak使用
1,配置,修改\kernel\arch\arm64\configs\rockchip_linux_defconfig,修改后查看.config. larkubuntu:~/Public/rk356x-linux/rk356x-linux/kernel$ cat .config | grep -i kmemleak CONFIG_HAVE_DEBUG_KMEMLEAKy CONFIG_DEBUG_KMEMLEAKy CONFI…...
ASP.NET Core - 日志记录系统(二)
ASP.NET Core - 日志记录系统(二) 2.4 日志提供程序2.4.1 内置日志提供程序2.4.2 源码解析 本篇接着上一篇 ASP.NET Core - 日志记录系统(一) 往下讲,所以目录不是从 1 开始的。 2.4 日志提供程序 2.4.1 内置日志提供程序 ASP.NET Core 包括…...
阿里云直播互动Web
官方文档:互动消息Web端集成方法_视频直播(LIVE)-阿里云帮助中心 以下是代码实现: <!-- 引入阿里云互动文件 --> <script src"https://g.alicdn.com/code/lib/jquery/3.7.1/jquery.min.js"></script> <script src&quo…...
解锁无证身份核验:开启便捷安全新征程
在当今快速发展的数字化时代,身份核验作为确保信息安全与交易诚信的基石,正经历着前所未有的变革。传统的身份核验方式,如携带身份证件进行现场验证,虽在一定程度上保障了安全,却也带来了诸多不便。随着科技的进步&…...
[DO374] Ansible 配置文件
[DO374] Ansible 配置文件 1. 配置文件位置2. 配置文件3. Ansible 配置4. Ansible的Ad-hoc5. Ansible 模块6. playbook段落7. 任务执行后续8. Ansible 变量8.1 ansible 变量的定义8.1.1 主机变量8.1.2 主机组变量 8.2 vars的循环 9. Ansible Collection10. Ansible-galaxy 安装…...
【杂谈】-50+个生成式人工智能面试问题(四)
7、生成式AI面试问题与微调相关 Q23. LLMs中的微调是什么? 答案:虽然预训练语言模型非常强大,但它们并不是任何特定任务的专家。它们可能对语言有惊人的理解能力,但仍需要一些LLMs微调过程,开发者通过这个过程提升它…...
RuoYi Cloud项目解读【四、项目配置与启动】
四、项目配置与启动 当上面环境全部准备好之后,接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 1 后端配置 1.1 数据库 创建数据库ry-cloud并导入数据脚本ry_2024xxxx.sql(必须),quartz.sql(可选&…...
51c~Pytorch~合集5
我自己的原文哦~ https://blog.51cto.com/whaosoft/13059544 一、PyTorch DDP 正在郁闷呢 jetson nx 的torchvision安装~~ 自带就剩5g 想弄到ssd 项目中的 venv中又 cuda.h没有... 明明已经装好什么都对 算了说今天主题 啊对 还是搬运啊 学习之工具人而已 勿怪 Distrib…...
【芯片封测学习专栏 -- 什么是 Chiplet 技术】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewChiplet 背景UCIeChiplet 的挑战 Overview Chiplet 又称为小芯片。该技术通过将大型SoC划分为更小的芯片,使得每个部分都能采用不同…...
Java SpringBoot + Vue + Uniapp 集成JustAuth 最快实现多端三方登录!(QQ登录、微信登录、支付宝登录……)
注:本文基于 若依 集成just-auth实现第三方授权登录 修改完善,所有步骤仅代表本人如下环境亲测可用,其他环境需自辩或联系查看原因! 系统环境 运行系统:Windows10专业版、Linux Centos7.6 Java 版本:1.8.0_…...
支持向量回归(SVR:Support Vector Regression)用于A股数据分析、预测
简单说明 支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。 它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。 可以把它想象成:找到一条「宽带」或「隧道」,大部分…...
ZYNQ初识10(zynq_7010)UART通信实验
基于bi站正点原子讲解视频: 系统框图(基于串口的数据回环)如下: 以下,是串口接收端的波形图,系统时钟和波特率时钟不同,为异步时钟,,需要先延时两拍,将时钟同…...
专题 - STM32
基础 基础知识 STM所有产品线(列举型号): STM产品的3内核架构(列举ARM芯片架构): STM32的3开发方式: STM32的5开发工具和套件: 若要在电脑上直接硬件级调试STM32设备,则…...
2 XDMA IP中断
三种中断 1. Legacy 定义:Legacy 中断是传统的中断处理方式,使用物理中断线(例如 IRQ)来传递中断信号。缺点: 中断线数量有限,通常为 16 条,限制了可连接设备的数量。中断处理可能会导致中断风…...
自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器
使用 Open AI 兼容的 API,可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑,私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量,为了简化网络配置&#…...
抖音矩阵是什么
抖音矩阵是指在同一品牌或个人IP下,通过创建多个不同定位的抖音账号(如主号、副号、子号等),形成一个有机的整体,以实现多维度、多层次的内容覆盖和用户互动。以下是关于抖音矩阵的详细介绍: 抖音矩阵的类…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
