java中的tcp

news2024/9/9 0:36:43

在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 地址和端口。接着获取输入输出流,通过输出流将需要发送给服务端的数据写入到套接字中;通过输入流读取服务端响应的数据,并输出到控制台。最后关闭所有资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web、http协议、apache服务、nginx服务

web基本概念和常识 概念 web:为用户提供的一种在互联网上浏览信息的服务,是动态的、可交互的、跨平台的和图形化的; 为用户提供各种互联网服务,这些服务包括浏览服务以及各种交互式服务,包括聊天、购物等&#xff1…

windows下,pyrouge安装教程

1.安装perl 1.1 在命令行,检查perl是否安装 perl-v 1.2 安装perl 下载地址 Strawberry Perl for Windows - Releases 1)下载msi版本 2)双击安装包,傻瓜式安装,一路next,(可修改安装路径&am…

Matlab编程资源库(16)数值微分

一、数值差分与差商 在Matlab中,数值差分与差商是数值分析中常用的概念,尤其在求解微分方程、插值、逼近等领域有广泛应用。下面简要介绍这两个概念及其在Matlab中的实现。 数值差分 数值差分是微分运算的离散化形式,用于近似求解导数。给定…

宠物浮毛空气净化器真的有用吗?性价比高的浮毛空气净化器推荐

作为一位5年资深铲屎官,随着养猫的家庭数量不断增加,轻松撸猫虽然很快乐。然而,宠物的存在也可能引发一些问题,比如宠物的体味和脱落的毛发,这些都可能成为影响家庭健康的隐患。特别是宠物排泄物的气味,如果…

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用(引用折叠) 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

【找到字符串中所有字母异位词】python刷题记录

R2-滑动窗口篇 滑动窗口哈希表 和之前那道一样 http://t.csdnimg.cn/dpIbt class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:#返回字典记录了每个字符出现的次数counter1collections.Counter(p)#滑动窗口记录counter2即可ret[]num2len(s)num1len(p…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机,解压,进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

如何将WordPress文章中的外链图片批量导入到本地

在使用采集软件进行内容创作时,很多文章中的图片都是远程链接,这不仅会导致前端加载速度慢,还会在微信小程序和抖音小程序中添加各种域名,造成管理上的麻烦。特别是遇到没有备案的外链,更是让人头疼。因此,…

2024下《系统架构设计师》案例简答题,刷这些就够了!

2024年软考下半年已经越来越近了,不知道今年备考架构的同学们准备得怎么样了呢? 简答题一直是架构拿分的重点区域,对于许多考生来说,也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家,希望…

C++选择题带答案

1.下列关于定义一个指向double型变量的指针,正确的是( B )。 A.int a(5);double *pda; B.double d(2.5),*pd&d; C.dou…

uniapp时间戳转时间

时间戳转时间 utils页面 function timestampToTime(time) { const date new Date(time); const year date.getFullYear(); const month String(date.getMonth() 1).padStart(2, 0); // 月份从0开始,所以要加1,并补齐0 const day String(date…

系统架构师考点--系统架构设计(下)

大家好。今天总结一下系统架构设计的最后一部分知识点。 一、软件系统的质量属性 软件系统的质量属性 软件系统的质量属性可分为开发期质量属性和运行期质量属性2个部分。 1、开发期质量属性主要指在软件开发阶段所关注的质量属性,主要包含6个方面: …

联想电脑怎么重装系统_联想电脑U盘重装win10详细图文教程

联想电脑怎么重装系统?在当今科技发展迅猛的时代,联想电脑已经成为了人们生活中不可或缺的一部分。然而,随着时间的推移,我们可能会遇到一些问题,例如系统崩溃或者需要更换操作系统。这时,使用U盘来重新安装…

57页PPT智慧水利数字孪生综合解决方案

实现“全局一盘棋”的智慧水利综合管理,关键在于整合水利大数据、数字孪生与人工智能技术,通过“一图、一库、一平台”的构建,为水利工作提供全面、科学、智能的管理和决策支持。以下是对这一目标的详细解读和实现路径: 知识星球…

C/C++进阶 (8)哈希表(STL)

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 本文着重于模拟实现哈希表,并非是哈希表的使用。 实现的哈希表的底层用的是线性探测法,并非是哈希桶。 目录 一、标准库中的哈希表 1、unordered_map 2、unordered_set 二、模…

【计算机毕设论文】基于SpringBoot线上学习平台的设计与实现

💗博主介绍:✌全平台粉丝5W,高级大厂开发程序员😃,博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来,同学门有不懂的毕设选题,项目以及论文编写等相…

「数组」实现动态数组的功能(C++)

概述 动态数组,顾名思议即可变长度的数组。数组这种数据结构的实现是在栈空间或堆空间申请一段连续的可操作区域。 实现可变长度的动态数组结构,应该有以下操作:申请一段足够长的空间,如果数据的存入导致空间已满,则…

CentOS7安装最新版vim;vim自动补齐配置

想练习一会vim,结果发现敲代码没有空号自动补齐和缩进很难受,所以想配置一下。 配置vim: 可以通过 vim ~/.vimrc 来给 vim 加启动的设定(比如set nu,这样就会在每次启动的时候都加上行号。当然过程中可以在底行模式输…

基于SpringBoot+Vue的学生考勤管理系统(带1w+文档)

基于SpringBootVue的学生考勤管理系统(带1w文档) 系统为了数据库结构的灵活性选择MySQL来设计,而java技术,B/S架构则保证了较高的平台适应性。本文主要介绍了系统开发背景,需要完成的功能与开发过程,说明系统设计重点与设计思想。…

如何在linux系统中用conda安装R环境及R包

一、miniconda3的安装不再赘述 二、安装R环境 1. 提前准备好conda的R单独环境 conda env list #查看已有环境 查看R的最新版本:r-project ##创建环境和激活环境 conda create -n R4.4.1 conda activate R4.4.1 备注:激活环境Linux,OS X…