【网络编程】简述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.mfbz.cn/a/171460.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云标准型S5云主机性能评测_CPU内存_带宽系统盘测评

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,腾…

buildAdmin 后端控制器的代码分析

buildAdmin的代码生成&#xff0c;很像是 fastadmin 的生成模式&#xff0c;当我们利用数据库生成了一个控制器的时候&#xff0c;我们可以看到&#xff0c; 它的生成代码很简洁 <?phpnamespace app\admin\controller\askanswer;use app\common\controller\Backend;/*** 回…

2023.11.19使用flask制作一个文件夹生成器

2023.11.19使用flask制作一个文件夹生成器 实现功能&#xff1a; &#xff08;1&#xff09;在指定路径上建立文件夹 &#xff08;2&#xff09;返回文件夹的路径和建立成功与否的提示 main.py import os from flask import Flask, request, jsonify, render_templateapp F…

archery修改为不能自提自审核上线SQL

目录 背景修改代码效果参考 背景 我和同事都可以提交上线SQL&#xff0c;但是不能自己提交的SQL自己去审核通过。目前的情况是可以自提自审。 修改代码 找到/opt/archery/sql/utils/workflow_audit.py文件 ...省略...# 判断用户当前是否是可审核staticmethoddef can_revie…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

【从入门到起飞】JavaSE—多线程(1)(实现方式,成员方法)

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;进程&#x1f33a;线程&#x1f384;并发&am…

线性表但是是Java中数组实用使用

线性表定义&#xff1a; 由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表&#xff0c;(n0)的时候被称为空表。 线性表的顺序表示 线性表的顺序存储又被称为顺序表 优点 无需为表示表中元素之间的逻辑关系而增加额外的存储空间可以随意读取任意位置的元素 缺点 插入…

商品购物管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 商品管理与推荐系统。本系统使用Python作为主要开发语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建显示界面&#xff0c;后端采用Django框架处理用户的请求响应。 创新点&#xff1a;使用协同过滤算法&#xff0c;以用户对商品的评分作为依据&#xff0c;在…

[C国演义] 第二十二章

第二十二章 不同的子序列交错字符串 不同的子序列 力扣链接 两个数组的dp问题 (子序列 && 子数组(子串)) ⇒ 分区间来讨论 ⇒ dp[i][j] -- 在s数组的[0, i]区间内, 去寻找t数组在[0, j]这段子串的个数 状态转移方程 遍历顺序 初始化 需要使用左上角的情况 ⇒ dp…

筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?

您家是不是还在人工敲仓估算&#xff1f; 您能精确知道料位和库存吗&#xff1f; 您能实时看到库存盈亏吗&#xff1f; 筒仓里装了什么&#xff1f;用了多少&#xff1f; 什么时候进料最划算&#xff1f; 您家的筒仓管理方式可靠吗&#xff1f; 上海思伟筒仓料位监测方案 看…

亚马逊出口电热毯日本PSE认证需要什么资料解析

电热毯出口日本需要办理PSE认证&#xff0c;电热毯&#xff0c;又名电褥&#xff0c;是一种接触式电暖器具。 PSE认证介绍是日本强制性认证&#xff0c;包含安全及EMI&#xff0c;用以证明电子电气等产品符合日期电气用品安全法或国际IEC标准的要求。日本电气用品安全法规定&am…

vue-waterfall2 实现瀑布流,及总结的问题

注意&#xff1a;引入需要在主界面引入&#xff0c;直接在组件中引用会有问题 1.安装 npm install vue-waterfall21.8.20 --save &#xff08;提示&#xff1a;一定要安装1.8.20&#xff0c;最新版会有一部分问题&#xff09; 2.打开main.js文件 import waterfall from v…

解析SOLIDWORKS教育版与企业版:选择合适版本,助力创新设计

SOLIDWORKS作为领先的三维CAD软件&#xff0c;旨在为工程设计、产品开发和创新提供全面支持。在SOLIDWORKS产品线中&#xff0c;教育版和企业版是两种常见的版本。让我们来了解一下它们之间的区别和特点。 SOLIDWORKS教育版&#xff1a;学习、探索、启发创新 面向教育和学术&…

电子邮件解决方案有哪些?邮件系统的问题?

如何选择适合的邮件解决方案&#xff1f;免费稳定企业邮箱系统&#xff1f; 电子邮件都是我们常用的工具。但是&#xff0c;随着电子邮件使用越来越普遍&#xff0c;如何有效地管理邮件也成了一个重要的问题。蜂邮EDM将介绍几种常见的电子邮件解决方案&#xff0c;帮助大家更好…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介&#xff1a;码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞&…

linux上安装qt creator

linux上安装Qt Creator 1 Qt Creator 的下载 下载地址为&#xff1a;http://download.qt.io/archive/qt/ 根据自己的需求选择Qt Creator版本&#xff0c;这里我下载的是5.12.9&#xff0c;如下图所示&#xff1a; 在ubuntu上可以使用wget命令下载安装包&#xff1a; wget h…

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

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

Java基本数据类型与引用类型的区别

晒个小暖 南方人的冬天&#xff0c;太阳总是很赏脸&#xff0c;花花草草长得很漂亮&#xff0c;厚棉被晒得很舒服&#xff0c;腊肠腊肉腊鸭油光发亮&#xff0c;就这样站在日光下一会吧&#xff0c;你也会变得亮亮堂堂&#xff0c;和和融融。不管是不是冬天&#xff0c;没有什…

c++面向对象

一、类和对象 类将具有共性的数据和方法封装在一起&#xff0c;加以权限区分&#xff0c;用户只能通过公共方法 访问私有数据。 类的权限分为&#xff1a;private&#xff08;私有&#xff09;、protected&#xff08;保护&#xff09;、public&#xff08;公有&#xff09;3种…

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

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…
最新文章