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

TCP编程案例

笔记:(本题可能需要的)

TCP协议:

TCP协议进行通信的两个应用进程:客户端、服务端。

使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道

传输前,采用“三次握手”方式,点对点通信,是可靠的

传输完毕,需释放已建立的连接,效率低

在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

在发送数据结束后,释放连接时需要经过四次挥手

Socket类

网络上具有唯一标识的IP地址和端口号组合在一起构成唯一能识别的标识符套接字(Socket)

Socket相关类API

   ServerSocket类

ServerSocket类的构造方法:

ServerSocket(int port) :创建绑定到特定端口的服务器套接字。

ServerSocket类的常用方法:

Socket accept():侦听并接受到此套接字的连接。

     Socket类

Socket类的常用构造方法

public Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

public Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

   Socket类的常用方法

public InputStream getInputStream():返回此套接字的输入流,可以用于接收消息

public OutputStream getOutputStream():返回此套接字的输出流,可以用于发送消息

public void close():关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。

例题1:客户端发送内容给服务端,服务端将内容打印到控制台上。注意点:先启动服务端,在启动客户端这里的IP地址和端口号使用自己电脑的查询IP地址:在运行框输入ipconfig查询端口号:在运行框输入netstas -ano
客户端创建步骤:
》1创建一个Socket创建一个IP地址,创建一个端口号;Socket是由IP地址和端口号组合在一起组合在一起的;----------IP地址和端口号都是服务端的将IP地址和端口号传入Socket构造器中,创建Socket对象(即创建一个流套接字)
》发送数据通过Socket对象调用getOutputStream()方法------返回此套接字的输出流通过输出流对象调用write()方法--------书写要发送的信息
》关闭资源(在关闭前都要判断该对象是否创建成功)关闭流资源关闭流套接字资源
  @Test// 客户端public void client() throws IOException {Socket socket = null;OutputStream os = null;try {//创建一个SocketInetAddress inetAddress = InetAddress.getByName("192.168.242.33");//声明对方的IP地址int port=10620;//声明对方的端口号socket = new Socket(inetAddress, port);//发送数据os = socket.getOutputStream();os.write("你好,我是客户端,请多多关照".getBytes());} catch (IOException e) {e.printStackTrace();} finally {//关闭Sockettry {if(socket!=null)socket.close();} catch (IOException e) {e.printStackTrace();}try {if(os!=null)os.close();} catch (IOException e) {e.printStackTrace();}}}
服务端创建步骤
》创建一个ServerSocket(即创建绑定到特定端口的服务器套接字)
》调用accept(),接受客户端的Socket通过前面ServerSocket的对象调用accept()方法(阻塞式方法)-----------侦听并接受到此套接字的连接。调用accept()方法返回的是一个Socket类的对象--------表示连接成功,接受客户端的Socket
》接收数据通过前面得到的Socket的对象来调用getInputStream()------------得到流对象通过流的对象来读取数据
》关闭资源(在关闭前都要判断该对象是否创建成功)关闭ServerSocket资源关闭Socket资源关闭流资源
 @Test//服务端public void server() throws IOException {ServerSocket serverSocket = null;Socket socket = null;//阻塞式的方法InputStream is = null;try {//创建一个ServerSocketint port=10620;serverSocket = new ServerSocket(port);//调用accept(),接受客户端的Socketsocket = serverSocket.accept();//接收数据is = socket.getInputStream();byte[] buffer=new byte[1024];int len;ByteArrayOutputStream baos = new ByteArrayOutputStream();//内部维护了一个byte数组while ((len=is.read(buffer))!=-1){//错误的
//                String str = new String(buffer, 0, len);
//                System.out.println(str);//正确的baos.write(buffer,0,len);}System.out.println(baos.toString());System.out.println("数据接收完毕");} catch (IOException e) {e.printStackTrace();} finally {//关闭Socket,ServerSocket,流try {if(socket!=null)socket.close();} catch (IOException e) {e.printStackTrace();}try {if(serverSocket!=null)serverSocket.close();} catch (IOException e) {e.printStackTrace();}try {if(is!=null)is.close();} catch (IOException e) {e.printStackTrace();}}}

相关文章:

TCP编程案例

笔记:(本题可能需要的) TCP协议: TCP协议进行通信的两个应用进程:客户端、服务端。 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道 传输前,采用“三次握手”方式…...

PyTorch 实现动态输入

使用 PyTorch 实现动态输入:支持训练和推理输入维度不一致的 CNN 和 LSTM/GRU 模型 在深度学习中,处理不同大小的输入数据是一个常见的挑战。许多实际应用需要模型能够灵活地处理可变长度的输入。本文将介绍如何使用 PyTorch 实现支持动态输入的 CNN 和…...

网络数据库

创建删除修改模式create schemadrop schema表create tabledrop tablealter table视图create view drop view索引create indexdrop index alter index 定义模式:create schema 《模式名》 authorization 《用户名》表定义语句 视图定义语句 授权定义语句//未指…...

【软考速通笔记】系统架构设计师⑲——专业英语

文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...

Android APP自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录:在Android中不能直接打开res aw目录中的数据…...

Spring 事务和事务传播机制

Spring 事务和事务传播机制 一、Spring 事务的基本概念 事务是一组操作,被视为一个不可分割的工作单元,要么全部完成,要么全部失败回滚,以此来确保数据的一致性和完整性。Spring事务管理允许我们在应用程序中声明式地或编程式地…...

VSCode(四)CMake调试

1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…...

创建存储过程

在student数据库中,创建一个名为ST_CHAXUN_01的存储过程,该存储过程返回计算机系学生的“姓名”、“性别”、“出生日期”信息。 操作步骤如下: ① 在“对象资源管理器”窗格中,展开“数据库”结点。 ② 单击相应的数据库&#…...

macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表

以下是 macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表: 符号按键名称描述⌘Command (Cmd)常用的功能键,用于执行大多数快捷操作。⌥Option (Alt)Option 键,常用于辅助操作和特殊字符输入。⇧ShiftShift 键,常用…...

ftp服务器搭建-安装、配置及验证

ftp服务器搭建-安装、配置及验证 #安装 sudo apt-get install vsftpd #配置文件 cat > /etc/vsftpd.conf << "EOF" listenNO listen_ipv6YES anonymous_enableNO local_enableYES write_enableYES dirmessage_enableYES use_localtimeYES xferlog_enable…...

windows ping 执行过程分析

控制台 PS C:\Users\Admin> ping mcs.zijieapi.com正在 Ping mcs.zijieapi.com [223.109.117.226] 具有 32 字节的数据: 来自 223.109.117.226 的回复: 字节32 时间31ms TTL49 来自 223.109.117.226 的回复: 字节32 时间30ms TTL49 来自 223.109.117.226 的回复: 字节32 时…...

强大的远程同步工具-rsync

rsync 强大的远程同步工具&#xff0c;也可用于本地目录和本地目录的同步&#xff0c;它最大的特点就是会自动判断进行增量同步&#xff1b; # “演示文档”后加了/&#xff0c;代表传输的是文件&#xff0c;建议destination也指定一个目录&#xff0c;该目录可以不存在&…...

蝉联第一 | IDC云系统软件市场报告2024H1,云轴科技ZStack独立云厂商第一

2024年12月&#xff0c;根据全球知名的IT市场研究和咨询公司IDC最新发布的《中国云系统软件市场跟踪报告2024H1》显示&#xff0c;2024年上半年中国云系统软件市场规模达到27.93亿元人民币&#xff0c;同比增长11.6%。在这一增长趋势中&#xff0c;云轴科技ZStack作为云系统软件…...

【IPV6改造解读】

座右铭&#xff1a;我们每一个心怀希望的人&#xff0c;就像是一颗种子一样&#xff01; 文章目录 前言一、IPV6改造基本情况分析二、IPV6针对不同场景改造方案1.网站/APP场景-IPV6云网关升级改造方案2.局域网专网(互联网侧)场景-安全大脑IPV6改造方案 总结 前言 提示&#xf…...

常用的Kali命令Top10

Kali Linux是一种基于Debian的Linux发行版&#xff0c;被广泛用于渗透测试和网络安全。以下是一些常用的Kali Linux命令的详细解释&#xff1a; ifconfig&#xff1a;显示和配置网络接口的信息。可以用于查看当前系统的IP地址、网关和子网掩码等。 apt-get&#xff1a;用于安装…...

阿里巴巴正式发布了全新大型语言模型Marco-o1

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【AI日记】24.12.07 kaggle 比赛 Titanic-10

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容&#xff1a; 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习&#xff08;pandas&#xff0c;numpy&#xff0c;sklearn&#xff0c;seaborn&#xff0c;matplotlib&a…...

《QT 示例宝库:探索丰富的编程世界》

《QT 示例宝库&#xff1a;探索丰富的编程世界》 一、QT 基础示例&#xff08;一&#xff09;QRadioButton 示例&#xff08;二&#xff09;拦截关闭事件示例 二、QT 常用代码示例&#xff08;一&#xff09;QObject 相关操作&#xff08;二&#xff09;Qt 基本容器遍历&#x…...

子类有多个父类的情况下Super不支持指定父类来调用方法

1、Super使用方法 super()函数在Python中用于调用父类的方法。它返回一个代理对象&#xff0c;可以通过该对象调用父类的方法。 要使用super()方法&#xff0c;需要在子类的方法中调用super()&#xff0c;并指定子类本身以及方法的名称。这样就可以在子类中调用父类的方法。 …...

鸿蒙UI开发——渐变色效果

1、概 述 ArkTs可以通过颜色渐变接口&#xff0c;设置组件的背景颜色渐变效果&#xff0c;实现在两个或多个指定的颜色之间进行平稳的过渡。 目前提供三种渐变类型&#xff1a;线性渐变、角度渐变、径向渐变。 我们在鸿蒙UI布局实战 —— 个人中心页面开发中&#xff0c;默认…...

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合&#xff0c;在底层创建一个默认长度为0的数组 2、添加第一个元素时&#xff0c;底层会创建一个新的长度为10的数组 3、存满时&#xff0c;会扩容1.5倍。 4、如果…...

java编程1.5.4 - 失而复得

前言 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往复以至无穷&a…...

R语言使用“纽约市数据集中的优步皮卡”数据创建不同年度时间范围的可视化

一、项目背景 为了分析纽约市优步&#xff08;https://baike.baidu.com/item/Uber/14900884&#xff09;皮卡在不同年度的使用情况&#xff0c;需要利用R语言进行数据可视化。通过对比不同年度的数据&#xff0c;可以揭示出优步皮卡使用的趋势和变化。 二、数据准备 数据集&a…...

韩企研学团造访图为科技:共探人工智能创新前沿

今日&#xff0c;一支由韩国知名企业研学专家组成的代表团莅临图为科技深圳总部&#xff0c;展开了一场深度技术交流与研讨活动。 此次访问旨在通过实地探访中国领先的科技企业&#xff0c;促进中韩两国在科技创新领域的深入合作与交流。 韩国游学团合影 图为科技作为一家在人…...

Windows设备go环境安装配置

一、下载go安装包 官网链接&#xff1a;All releases - The Go Programming Language (google.cn) 安装过程比较简单&#xff0c;这里不再赘述&#xff0c;可参考这位博主的文章。本文重点在环境配置。golang环境详细安装、配置_golang安装-CSDN博客 二、环境变量配置 1.添…...

THREE.js 入门(一)xyz坐标系

一、坐标系概念 在 three.js 中&#xff0c;相机的默认朝向是沿着 Z 轴的负方向。也就是说&#xff0c;默认情况下&#xff0c;相机会沿着 Z 轴的负方向“看”到场景中的对象&#xff0c;而 X 轴和 Y 轴分别对应水平方向和垂直方向。换句话说&#xff0c;相机的默认位置是 (0,…...

Android仿美团左右联动购物列表

Android仿美团左右联动购物列表 左右联动购物列表&#xff0c;不难。 一、思路&#xff1a; 两个RecycleView 二、效果图&#xff1a; 三、关键代码&#xff1a; public class MainActivity extends AppCompatActivity {private RecyclerView rl_left;private RecyclerVie…...

HTML 标签语义化指南:让网页更易读

HTML 语义化标签是指在 HTML 中使用具有明确含义的标签来标记网页内容的结构和意义。这些标签可以提供更多的语义信息&#xff0c;有助于搜索引擎理解网页内容&#xff0c;并为使用辅助技术的用户提供更好的访问体验。 以下是一些常见的HTML语义化标签及其含义和用途&#xff…...

Java日志记录几种实现方案

在平时使用到一些软件中&#xff0c;比如某宝或者某书&#xff0c;通过记录用户的行为来构建和分析用户的行为数据&#xff0c;同时也能更好优化产品设计和提升用户体验。比如在一个订单系统中&#xff0c;需要确定追踪用户的行为&#xff0c;比如&#xff1a; 登录/登出浏览商…...

【C++算法】32.前缀和_矩阵区域和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 1314. 矩阵区域和 题目描述&#xff1a; 解法 防止有人看不明白题目&#xff0c;先解释一下题目 二维前缀和思想&#xff1a; 使用前缀和矩阵 ret [x1,y1]~[x2,y2] D …...

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践 文章目录 30天学会Go--第7天 GO语言 Redis 学习与实践前言一、Redis 基础知识1.1 Redis 的核心特性1.2 Redis 常见使用场景 二、安装 Redis2.1 在 Linux 上安装2.2 在 Windows 上安装2.3 使用 Docker 安装 Redis 三、Redis 常用命令…...

面经自测——死锁/死锁的必要条件/死锁的预防/进程通信的方式

前言 本文是作者专门用来自测Java后端相关面试题的&#xff0c;所有问题都是在牛客、知识星球或网上找到的最近最新的面试题&#xff0c;全文回答都是作者按自己的真实水平仿照真实环境的回答&#xff0c;所以答案不一定真实&#xff08;但回答一定真诚&#x1f923;&#xff0…...

Mysql索引,聚簇索引,非聚簇索引,回表查询

什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构&#xff0c;类似于书的目录&#xff0c;通过目录可以快速的定位到想要的数据&#xff0c;因为一张表中的数据会有很多&#xff0c;如果直接去表中检索数据效率会很低&#xff0c;所以需要为表中的数据建立…...

Spring完整知识三(完结)

Spring集成MyBatis 注意 Spring注解形式集成MyBatis时&#xff0c;若SQL语句比较复杂则仍采用映射文件形式书写SQL语句&#xff1b;反之则用注解形式书写SQL语句&#xff0c;具体可详见Spring注解形式 环境准备相同步骤 Step1&#xff1a; 导入相关坐标&#xff0c;完整pom.…...

kafka-clients之ConsumerConfig

Kafka ConsumerConfig 中的配置项用于定义消费者的行为&#xff0c;如消费方式、偏移管理、组协调等。以下是ConsumerConfig中的关键配置项及其详细说明&#xff1a; 1. bootstrap.servers 类型&#xff1a;List<String>说明&#xff1a;Kafka集群的地址列表&#xff0…...

关于“浔川AI翻译”使用情况的调研报告

关于“浔川 AI 翻译”使用情况的调研报告 随着全球化进程加速及外语学习需求攀升&#xff0c;AI 翻译工具愈发普及。“浔川 AI 翻译”作为行业产品之一&#xff0c;为了解其市场表现与用户反馈&#xff0c;特开展本次问卷调查&#xff0c;现将关键结果汇报如下。 一、样本概…...

第一节、电路连接【51单片机-TB6600驱动器-步进电机教程】

摘要&#xff1a;本节介绍如何搭建一个51单片机TB6600驱动器步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机最小控制系统 ②USB转TTL模块 ③开关电源 ④TB6600步进电机驱动器 ⑤二相四线步进电机 ⑥电…...

编程之路,从0开始:补充篇

Hello大家好&#xff01;很高兴和大家又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞&#xff0c;关注&#xff01; 这篇…...

<script src = “https://cdn.jsdelivr.net/npm/vue/dist/vue.js“></script>

这行代码是HTML中的一个<script>标签&#xff0c;用于在网页中嵌入Vue.js库。具体来说&#xff1a; <script>&#xff1a;是HTML中的一个标签&#xff0c;用于定义客户端的脚本&#xff0c;比如JavaScript。 src&#xff1a;是<script>标签的一个属性&#…...

RabbitMQ延时队列

RabbitMQ延时队列 什么是延时队列 延时队列顾名思义&#xff0c;即放置在该队列里面的消息是不需要立即消费的&#xff0c;而是等待一段时间之后取出消费。 应用场景 场景一&#xff1a;在订单系统中&#xff0c;一个用户下单之后通常有30分钟的时间进行支付&#xff0c;如…...

Java——异常机制(下)

1 异常处理之(捕获异常) (一般处理运行时异常) (try-catch-finally子句) (finally一般用于文件最后关闭) (catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了&#xff0c;会报错) (Exception是父类放在最后&#xff0c;如果前面没有捕获到&#xff0c;就…...

9. 一分钟读懂“策略模式”

9.1 模式介绍 策略模式是一种行为型设计模式&#xff0c;用于在运行时灵活切换对象的行为或算法&#xff0c;它将算法封装为独立的类&#xff0c;使得它们可以互相替换&#xff0c;而不会影响使用这些算法的客户端代码。 策略模式的核心思想是&#xff1a;定义一系列可互换的算…...

python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime

发现这块网上信息很少&#xff0c;记录一下 微软azure入口 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/realtime-audio-quickstart?pivotsprogramming-language-ai-studio sdk文档 https://github.com/azure-samples/aoai-realtime-audio-sdk?tabread…...

linux查看应用程序执行时间

命令 ps -eo pid,comm,lstart,etime,args | grep -i java ps&#xff1a;是查看进程状态的命令。-eo&#xff1a;是-e和-o参数的组合&#xff0c;-e表示显示所有进程&#xff0c;-o后面跟的是自定义输出格式。pid&#xff1a;表示进程ID。comm&#xff1a;表示命令名&#x…...

mybatis之数据统计与自定义异常处理

文章目录 需求描述定义实体方式一、mybatisPlus实现方式二、自定义SQL实现简单查询过滤查询 异常处理1、SQL拼写异常 在使用Mybatis或MybatisPlus进行数据统计&#xff0c;在【 SpringBoot的Mybatis-plus实战之基础知识】中对mybatisplus引入有介绍&#xff0c;本次要使用其进…...

Jenkins 中自定义Build History中显示构建信息

有时候会遇到一个代码仓库下面会有多个不同的分支&#xff0c;而这写分支表示着不同的开发者在开发新的需求&#xff0c;但是这样就会出现一个问题&#xff0c;在Jenkins上进行多分支构建的时候&#xff0c;很难找到哪一个是属于自己分支构建的&#xff0c;这样的问题大家应该都…...

安装certbot(ubuntu系统)

安装nginx 更新软件包列表 sudo apt update 更新软件包列表 sudo apt install nginx 更新软件包列表 sudo systemctl status nginx 注意&#xff1a;强烈推荐使用&#xff0c;系统直接安装nginx&#xff0c;&#xff08;不推荐使用docker安装nginx&#xff09;为后续更简单…...

QTextBrowser按照段落来显示html的文字

在 PyQt5 中&#xff0c;QTextBrowser 是一个用来显示富文本&#xff08;如 HTML&#xff09;内容的小部件。要让 QTextBrowser 按照段落来显示 HTML 内容&#xff0c;可以确保 HTML 中的每个段落被正确地封装在 <p> 标签中或其他合适的 HTML 标签中。 基本思路 HTML 格…...

如何让Google快速收录你的页面?

要让Google更快地收录你的网站内容&#xff0c;首先需要理解“爬虫”这个概念。Google的爬虫是帮助它发现和评估网站内容质量的工具&#xff0c;如果你的页面质量高且更新频率稳定&#xff0c;那么Google爬虫更可能频繁光顾。通常情况下&#xff0c;通过Google Search Console&…...

用Linux完成firewall-cmd配置防火墙

注意这里是openeuler的系统 假设在内网架设了一台Web服务器,IP地址是192.168.1.2,端口是80,设置内网网段192.168.1.0/24中的主机均可以访问此Web服务器,如图所示 步骤如下&#xff08;包含结果&#xff09; 这里再服务端&#xff08;192.168.131.10&#xff09;上配置&#x…...