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下,通过创建多个不同定位的抖音账号(如主号、副号、子号等),形成一个有机的整体,以实现多维度、多层次的内容覆盖和用户互动。以下是关于抖音矩阵的详细介绍: 抖音矩阵的类…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
