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

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贪心

贪心 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤核心性质:每次采用局部最优,最终结果就是全局最优如果题目满足上述核心性质&#xf…...

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

官方文档&#xff1a;互动消息Web端集成方法_视频直播(LIVE)-阿里云帮助中心 以下是代码实现&#xff1a; <!-- 引入阿里云互动文件 --> <script src"https://g.alicdn.com/code/lib/jquery/3.7.1/jquery.min.js"></script> <script src&quo…...

解锁无证身份核验:开启便捷安全新征程

在当今快速发展的数字化时代&#xff0c;身份核验作为确保信息安全与交易诚信的基石&#xff0c;正经历着前所未有的变革。传统的身份核验方式&#xff0c;如携带身份证件进行现场验证&#xff0c;虽在一定程度上保障了安全&#xff0c;却也带来了诸多不便。随着科技的进步&…...

[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中的微调是什么&#xff1f; 答案&#xff1a;虽然预训练语言模型非常强大&#xff0c;但它们并不是任何特定任务的专家。它们可能对语言有惊人的理解能力&#xff0c;但仍需要一些LLMs微调过程&#xff0c;开发者通过这个过程提升它…...

RuoYi Cloud项目解读【四、项目配置与启动】

四、项目配置与启动 当上面环境全部准备好之后&#xff0c;接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 1 后端配置 1.1 数据库 创建数据库ry-cloud并导入数据脚本ry_2024xxxx.sql&#xff08;必须&#xff09;&#xff0c;quartz.sql&#xff08;可选&…...

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划分为更小的芯片&#xff0c;使得每个部分都能采用不同…...

Java SpringBoot + Vue + Uniapp 集成JustAuth 最快实现多端三方登录!(QQ登录、微信登录、支付宝登录……)

注&#xff1a;本文基于 若依 集成just-auth实现第三方授权登录 修改完善&#xff0c;所有步骤仅代表本人如下环境亲测可用&#xff0c;其他环境需自辩或联系查看原因&#xff01; 系统环境 运行系统&#xff1a;Windows10专业版、Linux Centos7.6 Java 版本&#xff1a;1.8.0_…...

支持向量回归(SVR:Support Vector Regression)用于A股数据分析、预测

简单说明 支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。 它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。 可以把它想象成:找到一条「宽带」或「隧道」,大部分…...

ZYNQ初识10(zynq_7010)UART通信实验

基于bi站正点原子讲解视频&#xff1a; 系统框图&#xff08;基于串口的数据回环&#xff09;如下&#xff1a; 以下&#xff0c;是串口接收端的波形图&#xff0c;系统时钟和波特率时钟不同&#xff0c;为异步时钟&#xff0c;&#xff0c;需要先延时两拍&#xff0c;将时钟同…...

专题 - STM32

基础 基础知识 STM所有产品线&#xff08;列举型号&#xff09;&#xff1a; STM产品的3内核架构&#xff08;列举ARM芯片架构&#xff09;&#xff1a; STM32的3开发方式&#xff1a; STM32的5开发工具和套件&#xff1a; 若要在电脑上直接硬件级调试STM32设备&#xff0c;则…...

2 XDMA IP中断

三种中断 1. Legacy 定义&#xff1a;Legacy 中断是传统的中断处理方式&#xff0c;使用物理中断线&#xff08;例如 IRQ&#xff09;来传递中断信号。缺点&#xff1a; 中断线数量有限&#xff0c;通常为 16 条&#xff0c;限制了可连接设备的数量。中断处理可能会导致中断风…...

自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器

使用 Open AI 兼容的 API&#xff0c;可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑&#xff0c;私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量&#xff0c;为了简化网络配置&#…...

抖音矩阵是什么

抖音矩阵是指在同一品牌或个人IP下&#xff0c;通过创建多个不同定位的抖音账号&#xff08;如主号、副号、子号等&#xff09;&#xff0c;形成一个有机的整体&#xff0c;以实现多维度、多层次的内容覆盖和用户互动。以下是关于抖音矩阵的详细介绍&#xff1a; 抖音矩阵的类…...

从HAL_Delay到精准定时:STM32 HAL库中微秒与毫秒延时方案的深度解析与实战

1. HAL库延时函数的基本原理与局限性 在STM32开发中&#xff0c;HAL_Delay()可能是我们最早接触的延时函数。这个看似简单的函数背后&#xff0c;其实隐藏着精妙的系统设计。HAL库默认使用SysTick定时器来实现毫秒级延时&#xff0c;每次调用HAL_Delay()时&#xff0c;实际上是…...

Kubernetes与存储管理最佳实践

Kubernetes与存储管理最佳实践 1. Kubernetes存储模型 Kubernetes存储模型定义了如何在容器化环境中管理和使用存储资源&#xff0c;是集群存储管理的基础。 1.1 存储模型核心概念 Volume&#xff1a;Pod中的存储卷&#xff0c;可被多个容器共享PersistentVolume (PV)&#xff…...

如何用Obsidian PDF++插件打造终极PDF阅读与标注体验

如何用Obsidian PDF插件打造终极PDF阅读与标注体验 【免费下载链接】obsidian-pdf-plus PDF: the most Obsidian-native PDF annotation & viewing tool ever. Comes with optional Vim keybindings. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-pdf-plus …...

Apache Parquet Java性能优化秘籍:5个关键技巧提升读写速度300%

Apache Parquet Java性能优化秘籍&#xff1a;5个关键技巧提升读写速度300% 【免费下载链接】parquet-java Apache Parquet Java 项目地址: https://gitcode.com/gh_mirrors/pa/parquet-java Apache Parquet Java是处理大数据列式存储的终极解决方案&#xff0c;通过合理…...

5分钟搭建原神私服:KCN-GenshinServer终极指南

5分钟搭建原神私服&#xff1a;KCN-GenshinServer终极指南 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 还在为复杂的命令行配置而头疼吗&#xff1f;想要轻松拥有自己的…...

实战应用:基于快马平台开发企业内网服务可用性监控系统

今天想和大家分享一个最近用InsCode(快马)平台快速实现的实用项目——企业内网服务可用性监控系统。这个需求来源于我们公司内部的实际痛点&#xff1a;随着服务器数量增加&#xff0c;经常出现某个服务端口异常但没人及时发现的情况。 1. 项目背景与需求分析 我们公司有几十…...

家庭实验室应用:OpenClaw+gemma-3-12b-it管理个人科研数据

家庭实验室应用&#xff1a;OpenClawgemma-3-12b-it管理个人科研数据 1. 为什么需要AI助手管理科研数据 去年冬天&#xff0c;我在整理三年积累的植物生长实验数据时&#xff0c;发现了一个尴尬的事实&#xff1a;有37个Excel文件分散在6个不同文件夹里&#xff0c;命名规则混…...

Kandinsky-5.0-I2V-Lite-5s短视频质量控制:5秒内关键帧稳定性与抖动抑制技巧

Kandinsky-5.0-I2V-Lite-5s短视频质量控制&#xff1a;5秒内关键帧稳定性与抖动抑制技巧 1. 引言&#xff1a;为什么需要关注短视频质量 当你使用Kandinsky-5.0-I2V-Lite-5s生成短视频时&#xff0c;是否遇到过这些问题&#xff1a;画面突然跳变、主体运动不连贯、镜头移动卡…...

基于凌科芯安加密芯片智能门锁解决方案

随着物联网产业的快速发展&#xff0c;智能网络设备对信息安全的需求与依赖日益增强。在万物互联的背景下&#xff0c;电子锁作为典型的安全防范产品&#xff0c;在重点场所安防与居民居家安全保障中发挥着关键作用。其中&#xff0c;智能门锁凭借密码、指纹、人脸识别、手机远…...

全套R分析代码,空间转录组 + scRNA-seq揭示阿尔茨海默病抗体药机制

&#x1f680;科研不掉发&#xff0c;快来这个地表最强的生信神仙网站&#xff1a;中国银河生信云平台&#x1f449; 立即访问&#xff1a;https://usegalaxy.cn最佳Galaxy生信云平台教程&#xff1a;从入门到精通&#xff08;图文版&#xff09;转录组分析流程和工具大全&…...