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

文章目录

  • 🎄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.mzph.cn/news/154323.shtml

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

相关文章

快速解密PPT幻灯片密码,让PPT重见天日

最简单的办法解密、找回和去除PPT幻灯片密码,具体步骤如下:1.百度搜索【密码帝官网】,2.点击“立即开始”在用户中心上传要解密的文件稍等片刻,就能找回密码。不用下载软件,手机电脑都可用。而且还支持Word、Excel、PD…

VC++添加包含目录

安装了QT;它带有很多例子; 新建一个工程,添加一个C++源文件,随便拷个例子的源码过来; 然后VS会提示头2个include语句出错; 因为找不到这两个头文件;这需要添加包含目录; 进入项目属性页;VC++目录 - 包含目录,它之前有2个系统的值;点击右侧的下拉箭头按钮,点…

C# 依赖注入如何实现

在 C# 中,依赖注入(Dependency Injection,简称 DI)是一种编程技术,用于减少代码之间的耦合。依赖注入可以通过构造函数注入、属性注入或方法注入实现。在 .NET Core 和 .NET 5 中,还提供了一个内置的依赖注…

基于Java GUI模拟银行自动取款机

一、课题描述 编写一个程序,模拟银行自动取款机的工作流程。主要功能如下所述: 当输入给定的卡号和密码(初始卡号为888888和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: 查询余额:初始余额为50000元 ATM取款:每次…

数据结构 栈与队列详解!!

一.栈 关于内存中的栈和数据结构中的栈是不同的,本章着重讲的是数据结构的栈。 这是一张关于栈的表达图。从图中可以看出栈很像是一副卡牌,发牌时只能从上取出,即出栈。 而入栈则是像你出牌后,要把你出的牌压在上一张出的牌上面。…

django理解03 数据库引入

配置 settings.py DATABASES {"default": {"ENGINE": "django.db.backends.mysql",NAME:307_django_db,USER: root,PASSWORD: 123456,HOST: 127.0.0.1,PORT: 3306,} }先创建指定名称的数据库databases create database self_django_db DEFAUL…

为什么mapper层不使用@Mapper注解,依然可以注入?

在MyBatis中,我们通常使用Mapper接口来操作数据库。在Spring Boot中,我们可以使用MapperScan注解来扫描Mapper接口所在的包,并将其注册到Spring容器中。但是,即使我们没有在Mapper接口上使用Mapper注解,Spring Boot也可…

小程序图片保存不上黑屏

小程序图片保存不上黑屏 微信小程序保存图片相关内容 以及保存图片到手机 保存的图片是黑屏的原因是由于使用了https的图片引用 需要配置download合法域名

【算法基础】筛质数

文章目录 问题描述解决方法朴素筛法线性筛法 问题描述 给定一个正整数 n n n,请你求出 1 ∼ n 1∼n 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行,包含一个整数,表示 1∼n 中质数的个数。 数据范围 …

完美解决k8s master节点无法ping node节点中的IP或Service NodePort的IP

1、问题一 使用搭建好了K8S集群,先是node节点加入k8s集群时,用的内网IP,导致master节点无法操作node节点中的pod(这里的不能操作,指定是无法查看node节点中pod的日志、启动描述、无法进入pod内部,即 kubec…

【GCN】GCN学习笔记一

谱域图卷积 卷积 卷积定义离散空间的卷积 图卷积简介 卷积定理谱域图卷积实现思路如何定义图上的傅里叶变换拉普拉斯矩阵 (Laplacian Matrix)拉普拉斯矩阵的性质拉普拉斯矩阵的谱分解拉普拉斯矩阵与拉普拉斯算子 图傅里叶变换 图上的信号表示经典傅里叶变…

Python Web框架的三强之争:Flask、Django和FastAPI

JetBrains 公布 2022 Python 开发者调查结果。 完整报告地址:https://lp.jetbrains.com/zh-cn/python-developers-survey-2022/ 这是由 Python 软件基金会 (PSF) 和 JetBrains 共同开展的第六次官方年度 Python 开发者调查,回复于 2022 年 10 月至 12 …

键鼠自动化2.0树形结构讲解

介绍 在键鼠自动化2.0中使用Qtc实现了全自定义树形结构,实现任务的拖拽,复制粘贴,撤销重做,以及包括树形结构增加序号展示,以及增加搜索功能 实现 1.自定义节点 // 自定义节点类 class TreeNode : public QObject …

2013年12月13日 Go生态洞察:Go在App Engine上的工具、测试和并发

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Java高级编程-----网络编程

网络通信协议 通过计算机网络可以实现多台计算机连接,但是不同计算机的操作系统和硬件体系结构不同,为了提供通信支持,位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交…

.NET 主流 ORM 功能介绍 大全 最新

.NET主流ORM 下面是3款.NET 使用最多的ORM 测试项目发布时间微信公众号投票 (追逐时间光者)使用难度功能SqlSugar orm201426% 491票适中全EFCore orm201636% 663票较难全Dapper orm201323% 374票简单少 一、SqlSugar ORM介绍 是一款 老牌 .NET 开源多库架构ORM框架…

mricorn 手动勾画ROI并保存为模版的方法步骤

mricorn软件手动勾画ROI: 这里拿一个做了切除手术的癫痫病人举例子,我们需要把切除区域勾画出来并保存成切除的模版。 1、将图像导入到mricorn中 2、逐层勾画ROI并填充 比较方便的是从切除区域的起始层进行勾画,这里为了方便展示只勾画中间…

计算机网络的OSI七层模型

目录 1、OSI七层模型是什么 1.1 物理层(Physical Layer) 1.2 数据链路层(Data Link Layer) 1.3 网络层(Network Layer) 1.4 传输层(Transport Layer) 1.5 会话层(S…

如何进行并发编程和线程同步?

并发编程是一种多任务处理的编程范式,它允许程序中的多个任务(线程、进程等)在相同的时间段内执行。线程同步是确保这些并发任务在共享资源上正确协作的一种技术。在C语言中,通过使用线程和相关的同步机制,可以实现并发…

5款免费BI数据可视化工具,2023年最新精选推荐!

BI可视化工具顾名思义是进行数据分析和可视化的软件,旨在将数据以表格、图表、仪表盘等形式展示出来,让用户能够更加直观了解其业务状况、发现问题,并在必要时进行决策。   市面上BI数据可视化工具很多,目前比较火的像国外的Tabl…