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

JAVA学习-网络编程.TCP

        TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在Java网络编程中被广泛应用。TCP通信可以确保数据的可靠传输,并且具有一定的顺序性。

一、Java中实现TCP通信主要有以下几种方式:

1. Socket类:

Socket类是Java提供的最基本的用于实现TCP通信的类。通过Socket类可以创建客户端和服务器端的Socket,并通过输入输出流进行数据的传输。

2. ServerSocket类:

ServerSocket类用于在服务器端监听客户端的连接请求,并创建Socket对象与客户端进行通信。

3. NIO(New I/O):

Java提供了NIO用于实现更高效的IO操作。NIO中的Channel和Buffer可以实现非阻塞的网络通信,提高了系统的吞吐量和响应性能。

二、TCP通信的特点包括:

1. 面向连接:

TCP通信使用三次握手建立连接,并且在通信过程中保持连接状态,确保数据的可靠传输。

2. 可靠性:

TCP协议通过序号和确认应答机制保证数据的可靠传输,并且自动重传丢失的数据。

3. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

三、使用TCP通信的基本步骤如下:

1. 服务器端创建ServerSocket对象,并指定端口号。

2. 服务器端调用accept()方法监听客户端的连接请求。

3. 客户端创建Socket对象,并指定服务器端的IP地址和端口号。

4. 服务器端与客户端建立连接后,通过输入输出流实现数据的传输。

5. 客户端向服务器端发送请求数据,服务器端接收并处理请求。

6. 服务器端向客户端返回响应数据,客户端接收并处理响应。

四、与其他通信方式相比,TCP通信具有以下优点:

1. 可靠性:

TCP协议使用确认应答机制和重传机制,可以确保数据的可靠传输。

2. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

3. 流式传输:

TCP协议可以将数据分成小块进行传输,无需关心数据的大小。

4. 支持双向通信:

TCP通信可以实现客户端和服务器端的双向通信。

五、高级应用中,可以使用多线程实现多个客户端同时与服务器端进行通信,也可以通过使用NIO提高网络通信的性能和并发能力。

以下是一个简单的TCP通信示例代码:

服务器端代码:

import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) {try {// 创建ServerSocket对象并绑定端口号ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");// 监听客户端的连接请求Socket clientSocket = serverSocket.accept();// 获取输入流,用于接收客户端发送的数据InputStream is = clientSocket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 获取输出流,用于向客户端发送数据OutputStream os = clientSocket.getOutputStream();PrintWriter pw = new PrintWriter(os);// 接收客户端发送的数据String data = br.readLine();System.out.println("客户端发送的数据:" + data);// 向客户端发送响应数据pw.println("Hello, I'm server!");pw.flush();// 关闭流和Socket连接pw.close();os.close();br.close();isr.close();is.close();clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}

客户端代码:

import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) {try {// 创建Socket对象并指定服务器端的IP地址和端口号Socket socket = new Socket("localhost", 8888);// 获取输入流,用于接收服务器端发送的数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 获取输出流,用于向服务器端发送数据OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);// 向服务器端发送数据pw.println("Hello, I'm client!");pw.flush();// 接收服务器端发送的数据String data = br.readLine();System.out.println("服务器发送的数据:" + data);// 关闭流和Socket连接pw.close();os.close();br.close();isr.close();is.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

        以上代码实现了一个简单的TCP通信示例,服务器端监听客户端的连接请求,接收客户端发送的数据并返回响应,客户端与服务器端建立连接后,发送数据,并接收服务器的响应。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

相关文章:

JAVA学习-网络编程.TCP

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在Java网络编程中被广泛应用。TCP通信可以确保数据的可靠传输,并且具有一定的顺序性。 一、Java中实现TCP通信主要有以下几种方式: 1. Socke…...

[Android]创建Google Play内购aab白包

开发时需要调试Google内购,需要先往Google商店传一个白包上去。确定包名,然后进行内购产品创建。 1.创建一个空项目,填写正式名称和正式包名。 如果你只是为一个测试开发账号打白包,然后进行内购测试,这时包名随便写…...

大数据基础:Linux基础详解

课程介绍 本课程主要通过对linux基础课程的详细讲解,让大家熟练虚拟机的安装使用,Linux系统的安装配置,学习掌握linux系统常用命令的使用,常用的软件安装方法,制作快照,克隆,完成免密登录&…...

unity中 鼠标按下移动端与pc端的位置

if (Input.GetMouseButtonDown(0)) { Vector2 V Input.touchCount > 0 ? Input.GetTouch(0).position : new Vector2(Input.mousePosition.x, Input.mousePosition.y); } 射线检测 if (Input.GetMouseButtonDown(0)) { …...

增强现实(AR)在广告中的力量

The Power of AR in Advertising 写在前面 增强现实(AR -Augmented Reality)是指借助软件、应用程序和智能手机、平板电脑或耳机等设备,为日常生活添加视觉和音频元素的技术。如今,品牌和广告商可以在营销活动中使用AR&#xff0…...

日志收集监控告警平台的选型思考

目前市面上比较常见的日志收集系统有:ELK,Grafana Loki,OpenObserve,SigNoz,Graylog ,Syslog-ng,Highlight,接下来我会对这几个一一做分析。 1. ELK ELK 是 Elasticsearch、Logsta…...

苹果Find My产品需求增长迅速,伦茨科技ST17H6x芯片供货充足

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、Ai…...

题目:忐忑楼梯Ⅱ

问题描述: 解题思路: 利用差分,当第一个以后的差分元素都为零时就代表楼梯高度等于第一个楼梯的高度。为什么是第一个呢,因为以第一个为标准的区间操作数最少。 注意点:每次都只能加一或减一,ans开ll 题解&…...

TS函数类型

函数类型表达式 function hello(x: string) {console.log(x) } //greeter函数的参数是一个函数fn,fn也有一个string类型参数,无返回值。 function greeter(fn: (a: string) > void) {fn(hello) } greeter(hello)也可以把定义参数类型的语句单独提取出…...

数据链路层(四):数据链路层协议

目录 1 数据链路层协议1.1 异步协议1.2 同步协议1.3 局域网数据链路层协议1.4 广域网数据链路层协议 1 数据链路层协议 数据链路层“协议”也称为“规程”,数据链路控制协议也称数据链路控制规程。 数据链路控制协议主要分为异步协议和同步协议两大类。 1.1 异步协…...

#Linux系统编程(孤儿进程及僵尸进程以及wait函数)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)概述 在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的&#xff…...

苍穹外卖项目-01(开发流程,介绍,开发环境搭建,nginx反向代理,Swagger)

目录 一、软件开发整体介绍 1. 软件开发流程 1 第1阶段: 需求分析 2 第2阶段: 设计 3 第3阶段: 编码 4 第4阶段: 测试 5 第5阶段: 上线运维 2. 角色分工 3. 软件环境 1 开发环境(development) 2 测试环境(testing) 3 生产环境(production) 二、苍穹外卖项目介绍 …...

学习笔记(16)函数防抖和节流

JavaScript 中的函数防抖(Debounce)和函数节流(Throttle)是两种优化频繁触发事件回调函数执行的技术,它们主要用于限制函数调用的频率,尤其是在处理高频率触发且响应开销较大的用户交互场景时。 函数防抖 …...

【揭秘】空号检测平台挑选秘籍:让每一分钱都花在“刀刃”上

在数字化营销时代,精准的数据是企业制胜的关键。而空号检测平台作为数据清洗的重要工具,其选择的正确与否直接影响到营销效果与成本效益。如何在众多平台中慧眼识珠,找到最适合自己的“黄金搭档”?今天,就跟着企讯通一…...

Linux源码包安装

目录 一、transmission源码包安装 二、 nginx源码包安装 一、transmission源码包安装 1、下载编译环境所需的软件包依赖 2、下载transmision源码包到用户主目录下 https://github.com/transmission/transmission/releases/download/4.0.5/transmission-4.0.5.tar.xz 3、解压…...

【P1328】[NOIP2014 提高组] 生活大爆炸版石头剪刀布

[NOIP2014 提高组] 生活大爆炸版石头剪刀布 题目背景 NOIP2014 提高组 D1T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种…...

查看k8s中的secret

kubectl get secret xxx -o yaml -n xxxx参考: Managing Secrets using kubectl...

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现五

【简单介绍】 依托先进的目标检测算法YOLOv8与灵活的PyQt5界面开发框架,我们倾力打造出了一款集直观、易用与功能强大于一体的目标检测GUI界面软件。通过深度融合YOLOv8在目标识别领域的出色性能与PyQt5的精美界面设计,我们成功推出了一款高效且稳定的软…...

C# get set 访问器

在C#中get 访问器set 访问器属性的优势例子 在C#中 get 和 set 是访问器(accessors)的关键词,它们用于定义属性的读取和写入行为。属性是一种特殊的类成员,它提供了对字段(field)或计算结果的灵活访问。 …...

【OpenGL】使用 python + Qt + OpenGL 的现代渲染

伴随资源 目录 一、说明二、 PyQt4三、PyOpenGL四、OpenGL 管线五、Python集成开发环境5.1 Emacs配置5.2 pycharm环境 六、你好,OpenGL!七、QGL控件八、平截头体.svg九、定义几何9.1 立即模式与保留模式9.2 使用 VBO 定义 Cube 十、渲染立方体十一、渲…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...