【网络编程】简述TCP通信程序,三次握手,四次挥手

news2024/11/17 23:27:26

文章目录

  • 🎄TCP通信程序
    • ⭐打印字符串
      • ✨中文乱码问题
        • 🎈解决方法
  • 🌺TCP三次握手
  • 🌺TCP四次挥手
  • 🛸其他

🎊专栏【网络编程】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【如愿】
🥰欢迎并且感谢大家指出我的问题

在这里插入图片描述

TCP(Transmission Control Protocol)是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。在程序员的网络编程中,TCP可以说是使用最频繁的网络协议之一。那么TCP通信程序是如何工作的呢?本文将详细介绍TCP通信的程序示例、三次握手、四次挥手等过程,帮助大家深入理解TCP通信的内在运行机制。

TCP通信需要客户端与服务端建立连接后才能相互发送数据。在Java中,通过Socket类代表一个连接端点,通过ServerSocket类提供服务端口。TCP在传输数据之前,需要完成三次握手建立连接。当一方完成发送数据后,还需要进行四次挥手释放连接。这些都是TCP可靠传输的重要保证。

本文首先给出了使用Socket和ServerSocket的TCP通信示例程序,实现了客户端发送字符串,服务端打印输出的功能。这样可以看到TCP编程的基本流程和步骤。然后针对出现的中文乱码问题,给出了使用转换流InputStreamReader的解决方案。

接下来详细介绍了TCP三次握手的过程,这是为了让两端确认对方与自己都处于可通信状态,防止已失效连接请求报文段突然又传到了服务端,产生错误。最后又解释了TCP四次挥手的目的,这是为了让服务端明确知道客户端不会再发送数据了,可以安全关闭连接。

如果你想深入理解TCP的工作流程,那么本文提供的通信程序示例以及握手挥手过程的详细剖析将会对你有所帮助。最后,文中还提供了TCP与UDP的区别表格,可以更清楚对比这两种网络协议。

🎄TCP通信程序

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
通信之前要保证连接已经建立
通过Socket产生IO流来进行网络通信
在这里插入图片描述

⭐打印字符串

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        //TCP协议,发送数据
        //创建Socket对象
        Socket socket=new Socket("192.168.31.13",10001);

        //从连接通道中获取输出流
        OutputStream os=socket.getOutputStream();

        //写出数据
        os.write("aaa".getBytes());

        //释放资源
        os.close();
        socket.close();
    }
}

Server.java


import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //接收数据

        //创建对象
        ServerSocket ss=new ServerSocket(10001);

        //监听客户端的连接
        Socket socket=ss.accept();

        //从连接通道中获取输入流读取数据
        InputStream is=socket.getInputStream();
        int b;
        while((b=is.read())!=-1){
            System.out.println((char) b);
        }

        //释放资源
        socket.close();
        ss.close();
    }
}

先运行Server.java,再运行Client.java
发现打印出了字符串
在这里插入图片描述

✨中文乱码问题

在这里插入图片描述

我们发现,如果打印的字符串不是英文,而是中文,会产生乱码
这是为什么呢

因为我们没有指定编码表,那么就会使用平台默认的编码表UTF-8,在这种条件下,一个中文是3个字节,那么4个中文就是12个字节,此时12个字节全部都传到了服务器
服务器在读的时候,是一个字节一个字节的的读的,但是3个字节才是一个中文,那么每次转换的是1/3个中文,所以会出现乱码

🎈解决方法

使用一个转换流

在这里插入图片描述

🌺TCP三次握手

在这里插入图片描述

🌺TCP四次挥手

在这里插入图片描述

🛸其他

在这里插入图片描述
通过学习TCP通信程序的代码示例,并理解三次握手与四次挥手的必要性,可以加深对TCP协议机制的认识,帮助我们更好地运用TCP解决传输需求。
在这里插入图片描述

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

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

相关文章

Hive安装配置 - 本地模式

文章目录 一、Hive运行模式二、安装配置本地模式Hive(一)安装配置MySQL1、删除系统自带的MariaDB2、上传MySQL组件到虚拟机3、在主节点上安装MySQL组件4、在主节点上配置MySQL(1)查看MySQL服务状态(2)查看M…

每日一题(LeetCode)----数组--螺旋矩阵(一)

每日一题(LeetCode)----数组–螺旋矩阵(一) 1.题目(54. 螺旋矩阵) 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1…

电脑连有线和无线网络如何设置网络的优先级?

电脑同时连接有线和无线网络怎么设置网络的优先级: 我们知道在 笔记本电脑系统 中,可以通过有线或无线网络进行联网。如果电脑在有线网络和无线网络同时存在的情况,应该怎么设置有线网络优先连接呢?对此我们提供下面的方法可以让电脑在有Wi…

磐舟CI-Web前端项目

整体介绍 磐舟作为一个devops产品,它具备基础的CI流水线功能。同时磐舟的流水线是完全基于云原生架构设计的,在使用时会有一些注意事项。这里首先我们要了解磐舟整体的流水线打包逻辑。 文档结构说明 一般来说,磐舟推荐单个业务的标准git库…

基于Python实现用于实时监控和分析 MySQL 服务器的性能指标和相关信息工具源码

MySQL命令行监控工具 - mysqlstat 介绍 mysqlstat 是一个命令行工具,用于实时监控和分析 MySQL 服务器的性能指标和相关信息。 它可以帮助 DBA(数据库管理员)和开发人员定位和解决数据库性能问题。 以下是 mysqlstat 工具的主要功能&#…

数据结构【DS】图的应用

图的连通性问题 最少边数 最多边数 无向图非连通 𝒎𝟎 𝒎𝒏−𝟐∗(𝒏−𝟏)/𝟐 无向图连通 𝒎𝒏−𝟏 𝒎𝒏∗(&#…

python数据可视化之matplotlib.pyplot

文章目录 模块引用折线条图实际应用案例关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 不论是数据挖掘还是数据…

【U8+】用友U8账套引入/还原,提示:逻辑文件‘UFModel’不是数据库的一部分。

【问题描述】 用友U8+账套引入(恢复账套)的时候,提示: 逻辑文件‘UFModel’不是数据库‘UFDATA_001_2015’的一部分。 请使用RESTORE FILELISTONLY来列出逻辑文件名。-2147217900 【解决方法】 查看用友U8+账套库正确的逻辑名称为【UFMODEL】和【UFMODEL_log】。 【案例…

【软件测试】一位优秀测试工程师具备哪些知识和经验?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 根据观察&#xf…

「C++」AVL树的实现(动图)

💻文章目录 AVL树概念AVL的查找AVL树的插入 代码部分AVL树的定义查找插入旋转 📓总结 AVL树 概念 AVL树又名高度平衡的二叉搜索树,由G. M. Adelson-Velsky和E. M. Landis发明,顾名思义,其任意节点的左右子树最大高度…

哈希表HashTable

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。 哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,复杂度O(1) 哈希表本质…

外贸ERP系统是什么?推荐的外贸管理软件?

外贸ERP管理系统有哪些?海洋建站管理软件的功能? 为了更有效地处理外贸业务,许多企业正在寻找先进的工具和技术。为了提高效率、降低成本并增强竞争力,越来越多的外贸企业正在转向外贸ERP系统。那么,外贸ERP系统究竟是…

深度学习之基于Django+Tensorflow动物识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Django和TensorFlow的动物识别系统可以被设计成能够使用深度学习算法自动识别上传的图像中的动物种类&#xff…

CrystalDiskInfo/CrystalDiskMark/DiskGenius系统迁移

CrystalDiskInfo 主要用于看硬盘的各种信息,包括但不限于硬盘通电时间、通电次数、硬盘好坏状态 CrystalDiskMark 主要用于测试硬盘的读写速度、连续读写速度 DiskGenius 主要用于通过U盘装操作系统后进行,磁盘分区,更改磁盘名、隐藏部分…

女儿冬天的第一件羽绒服,这也太好看了

分享女儿的时尚穿搭 撞色插肩款羽绒服 同色系的精彩碰撞 描绘出绚烂的色彩 走在街上就是最靓的崽 显肤色显瘦超吸睛 妥投时尚小潮人一枚

Google App Campaigns的逻辑及其建议

Google App Campaigns(Google应用推广)是一种广告服务,旨在帮助应用开发者在Google平台上推广其应用程序。本文小编将讲讲Google App Campaigns的逻辑,并提供一些建议,以帮助应用开发者最大程度地利用这项服务。 1、Go…

gzip 压缩优化大 XML 响应的处理方法

当处理大型XML响应时,我们经常会面临内存限制和性能问题。 在处理这个问题时,我们可以使用Python的requests库和lxml库来解决。下面是解决方案的步骤: 1. 使用requests库发送HTTP请求获取XML响应。 2. 检查响应的Content-Encoding标头&…

高效开发与设计:提效Spring应用的运行效率和生产力 | 京东云技术团队

引言 现状和背景 Spring框架是广泛使用的Java开发框架之一,它提供了强大的功能和灵活性,但在大型应用中,由于Spring框架的复杂性和依赖关系,应用的启动时间和性能可能会受到影响。这可能导致开发过程中的迟缓和开发效率低下。优…

性能小课堂:Jmeter录制手机app脚本!

环境准备:1.手机2.wifi3.Jmeter 具体步骤: 1、启动Jmeter; 2、“测试计划”中添加“线程组”; 3、“工作台”中添加“HTTP代理服务器”; 4、配置代理服务器:Global Settings下面的端口配置&#xff1a…