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

java中的tcp

在Java中,TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它运行在IP(Internet Protocol,互联网协议)层之上,为应用层提供可靠的通信服务。TCP通过确保数据包的顺序传输、重传丢失的数据包以及错误检测,来保证数据的完整性和可靠性。

TCP的特点

  • 1. 面向连接:TCP在传输数据之前,需要建立连接,即三次握手过程。这确保了通信双方之间的数据通信是有序和可靠的。
  • 2. 可靠性:TCP通过确认应答机制、超时重传机制、错误校验机制等确保数据的可靠传输。
  • 3. 流量控制:TCP能够控制发送方和接收方之间的数据传输速率,防止由于发送方发送速度过快而导致接收方无法处理。
  • 4. 拥塞控制:当网络拥塞时,TCP能够减少发送数据量,以减轻网络负担。

TCP的使用场景

TCP由于其可靠性和面向连接的特性,非常适合于需要稳定数据传输的应用场景,如:

  • 1. 文件传输:如FTP(File Transfer Protocol,文件传输协议)服务,需要确保文件数据的完整性和准确性。
  • 2. Web服务:HTTP(HyperText Transfer Protocol,超文本传输协议)基于TCP协议,用于Web服务器和客户端之间的数据传输。
  • 3. 邮件传输:SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)也基于TCP协议,确保邮件数据的可靠传输。
  • 4. 远程登录:如SSH(Secure Shell)协议,用于远程登录和安全通信。
  • 5. 数据库连接:如JDBC(Java Database Connectivity)连接数据库时,通常使用TCP协议。

Java中TCP的使用

在Java中,TCP的客户端和服务器端的实现通常依赖于`Socket`类和`ServerSocket`类。

TCP服务器端实现

以下是一个简单的 Java TCP 服务端和客户端代码示例:

服务端代码:

import java.net.*;
import java.io.*;public class TCPServer {public static void main(String[] args) {try {// 创建服务器套接字ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");// 等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress());// 获取输入输出流InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();// 读取客户端发送的数据并输出到控制台byte[] buffer = new byte[1024];int len = inputStream.read(buffer);String data = new String(buffer, 0, len);System.out.println("接收到客户端数据:" + data);// 向客户端发送数据String message = "你好,客户端!";outputStream.write(message.getBytes());// 关闭资源inputStream.close();outputStream.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}


 

客户端代码:

import java.net.*;
import java.io.*;public class TCPClient {public static void main(String[] args) {try {// 创建客户端套接字并连接到服务器Socket socket = new Socket("127.0.0.1", 8888);// 获取输入输出流InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();// 向服务器发送数据String message = "你好,服务端!";outputStream.write(message.getBytes());// 读取服务器响应的数据并输出到控制台byte[] buffer = new byte[1024];int len = inputStream.read(buffer);String data = new String(buffer, 0, len);System.out.println("接收到服务器响应数据:" + data);// 关闭资源inputStream.close();outputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

这个示例中,服务端代码和客户端代码分别实现了 TCP 通信的基本功能,即客户端向服务端发送数据,服务端接收并处理数据后返回响应数据。

在服务端代码中,首先创建了一个 ServerSocket 对象,用于监听指定端口的连接请求。然后通过 accept() 方法等待客户端连接,当有客户端连接时,会返回一个 Socket 对象,表示与服务器的连接已经建立。接着获取输入输出流,通过输入流读取客户端发送的数据,并输出到控制台;通过输出流向客户端发送响应数据。最后关闭所有资源。

在客户端代码中,首先创建了一个 Socket 对象,连接到服务端指定的 IP 地址和端口。接着获取输入输出流,通过输出流将需要发送给服务端的数据写入到套接字中;通过输入流读取服务端响应的数据,并输出到控制台。最后关闭所有资源。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot集成GraalVM创建高性能原生镜像
  • 60个常见的 Linux 指令
  • 淘宝的商品信息缓存体系是如何构建的?
  • 基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】
  • 孟德尔随机化、R语言,报错,如何解决?
  • 【达梦数据库】通过线程pid定位会话SQL
  • Python——继承
  • vue2学习 -- 核心语法
  • 2024下半年,前端的技术风口来了
  • 【保姆级讲解下QT6.3】
  • JavaScript 实现通话计时(时分秒 本示例在uniapp中)
  • 2024小卷Spring Boot3.0教程思维导图整理
  • python np.max怎么用
  • 代码随想录算法训练营第41天|LeetCode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
  • 多进程编程思维导图
  • [译]Python中的类属性与实例属性的区别
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【剑指offer】让抽象问题具体化
  • 2017 年终总结 —— 在路上
  • chrome扩展demo1-小时钟
  • GitUp, 你不可错过的秀外慧中的git工具
  • IDEA 插件开发入门教程
  • interface和setter,getter
  • Js基础知识(四) - js运行原理与机制
  • PermissionScope Swift4 兼容问题
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • V4L2视频输入框架概述
  • 搭建gitbook 和 访问权限认证
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 线性表及其算法(java实现)
  • 译米田引理
  • 赢得Docker挑战最佳实践
  • 终端用户监控:真实用户监控还是模拟监控?
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # include “ “ 和 # include < >两者的区别
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #git 撤消对文件的更改
  • #java学习笔记(面向对象)----(未完结)
  • #数据结构 笔记三
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (52)只出现一次的数字III
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二)构建dubbo分布式平台-平台功能导图
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)理解angular中的module和injector,即依赖注入
  • (循环依赖问题)学习spring的第九天
  • (转)nsfocus-绿盟科技笔试题目
  • .CSS-hover 的解释