TCP通信实现两个主机之间的信息交互
TCP通信概述
TCP协议用来控制两个网络设备之间的点对点通信,两端设备按作用分为客户端和服务端。服务端为客户端提供服务,通常等待客户端的请求信息,有客户端请求到达之后,及时提供服务和返回响应消息;客户端向服务端主动发出请求,并接受响应消息。
首先启动服务端程序,并开始等待网络中的客户请求,然后客户端主动向服务端发出连接请求,服务端接收到客户端的连接请求后,并和客户端之间建立一个稳定的TCP/IP通信连接。
现在客户端将向服务端主动发出请求,服务端接收客户端消息,并及时返回响应消息。这是通过IO流(字节流)实现的。
通信完成后,由客户端主动关闭和服务端之间的连接;如果客户端未主动关闭和服务端之间的连接,服务端在等待指定的时间后将关闭这个连接。
TCP的特点
TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个有顺序且无差错的数据流。
因为TCP通信两端的行为是不同的,所以在客户端使用socket类实现通信,而服务器使用ServerSocket实现通信。
网络通信不是必须有两个物理主机,而是需要有两个不同的socket就可以通信,例如,在同一主机上IP地址是相同的,但是使用不同的端口创建不同的socket,这样的两个socket之间也是可以实现TCP/IP的通信。
TCP通信的实现原理
无论一个TCP通信程序的功能多么齐全,程序多么复杂,其基本结构都是一样的,都包括以下四个基本步骤:
在服务端指定一个端口号来创建serverSocket,并使用accept方法进行侦听,这将阻塞服务器线程,等待用户请求。
在客户端指定服务的主机IP和端口号来创建socket,并连接服务端serverSocket,此时服务端accept方法被唤醒,同时返回一个和客户端通信的socket。
在客户端和服务端分别使用socket来获取网络通信输入/输出流,并按照一定的通信协议对socket进行读/写操作。
通信完成后,在客户端和服务端中分别关闭socket。
————————————————
原文链接:https://blog.csdn.net/huixiaodezuotian/article/details/121797825
更为详细的解释和应用
一、TCP、UDP间的关系
TCP 和 UDP -> 传输层的协议:
UDP:用户数据报协议,面向无连接,可以单播,多播,广播, 面向数据报,不可靠
TCP:传输控制协议,面向连接的,可靠的,基于字节流,仅支持单播传输
UDP TCP
是否创建连接 无连接 面向连接
是否可靠 不可靠 可靠的
连接的对象个数 一对一、一对多、多对一、多对多 支持一对一
传输的方式 面向数据报 面向字节流
首部开销 8个字节 最少20个字节
适用场景 实时应用(视频会议,直播) 可靠性高的应用(文件传输)
二、TCP通信的流程
1、服务器端(被动接收连接的角色)
(1)创建一个用于监听的套接字
- 监听:监听有客户端的连接
- 套接字:这个套接字其实就是一个文件描述符
(2)将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)
- 客户端连接服务器的时候使用的就是这个IP和端口
(3)设置监听,监听的fd开始工作
(4) 阻塞等待,当有客户端发起连接,解除阻塞,接受客户端的连接,会得到一个和客户端通信的套接字(fd)
(5)通信
- 接收数据
- 发送数据
(6)通信结束,断开连接
2、客户端
(1)创建一个用于通信的套接字(fd)
(2)连接服务器,需要指定连接的服务器的 IP 和 端口
(3)连接成功了,客户端可以直接和服务器通信
- 接收数据
- 发送数据
(4) 通信结束,断开连接
3、TCP通信流程图
————————————————
版权声明:本文为CSDN博主「一米九零小胖子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47156401/article/details/125884879
TCP通信实现两个主机之间的信息交互的更多相关文章
- 两台主机之间单向Ping不通的问题
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ...
- Linux两台主机之间建立信任(ssh免密码)
背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系. 在整理之前,我先说下ssh免密码的要点 : 你想免密 ...
- fragment之间的信息交互——onActivityResult()不经过Activity
1.本文讲述如何fragment与fragment之间互传信息,不用使用Activity的onActivityResult()方法 核心思想:FirstFragment获取到SecondFragmen ...
- 网络中两台主机的通信过程(TCP)
两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...
- python实现两台不同主机之间进行通信(客户端和服务端)——Socket
大家好,我是辰哥~ 今天教大家通过Python进行Socket网络编程 (做一个聊天程序) 可以实现在不同的主机(电脑)之间进行通话. 具体效果如何,接着往下看 可以看到客户端(上方)向服务器端(下方 ...
- Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号
1.架构 C/S架构(鼻祖) C:client 客户端 S:server 服务器 早期使用的一种架构,目前的各种app使用的就是这种架构,它的表现形式就是拥有专门的app. B/S架构(隶属于C/ ...
- Java网络编程之TCP通信
一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...
- 套接字、UDP通信、TCP通信、TCP/IP协议簇
一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...
- Java 之 TCP 通信程序
一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
在程序设计中,涉及数据存储和数据交换的时候,不管是B/S还是C/S模式,都有这样一个概念:数据库服务器.这要求一台性能和配置都比较好的主机作为服务器,以满足数目众多的客户端进行频繁访问.但是对于一些数 ...
随机推荐
- 【GDKOI 2021提高组DAY2】抄写
\(\text{Solution}\) \(dp\) 翻折就只需预处理回文中心 \(Manacher\) 预处理即可 \(Code\) #include<cstdio> #include& ...
- NSDT可编程3D场景
推荐:将 NSDT场景编辑器 加入你的3D开发工具链. NSDT编辑器简化了WebGL 3D应用的开发,完全兼容Three.JS生态.本文介绍如何在自己的应用中嵌入使用NSDT编辑器搭建的3D场景,并 ...
- ABAP 拼接PDF
参考标准程序RSPO_TEST_MERGE_PDF_FILES*--合并PDF data: pdf_merger type ref to cl_rspo_pdf_merge. data: ex typ ...
- vue子传父 .indexOf('1')!=-1
子传父 1.先在父级页面的子组件上加上自定义事件 <SearchSelector @attrinfo="propsinfo" /> 2.在子组件里面写方法传 //点击 ...
- #加IPV6路由
#加IPV6路由route -A inet6 add 2409:802f:6005:4204::31:0/123 gw 2409:805b:6005:4218::41f:1#路由写入网卡配置文件vi ...
- IT之软件公司组织架构
总结一下软件企业的组织架构,软件公司大部分都很年轻,整个行业还在调整期,一般规模都在300人以内,现在国内大型的软件产品公司都不是靠软件起家的,国内软件三强:华为.中信.海尔都是从硬件甚至是家电做起的 ...
- 基于VS码代码时出现访问错误的个人理解
日常在VS写代码中,有时候我们将写好的代码调试出来会出现有未经处理的异常,在0x00000000XXXX处有未经处理的异常,写入位置0xFFFFFFFFFFFFXX时发生访问冲突. 类似于图中情况,遇 ...
- disabled属性的简介和使用
一.disabled属性的简介和使用 Html中的input元素.button元素.option元素等都具有一个disabled属性. disabled对a标签不起作用当赋予该属性时该元素将变得不可交 ...
- 30分钟熟练使用最常用的ES6,还不学是等着被卷死?
一. 关于ES6 了解一门技术或者语言,最好的方法就是知道它能做些什么 ES6 , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范 那么它为什么会出现呢? 每一次标准的诞生都意味着语 ...
- 2022-05-05内部群每日三题-清辉PMP
1.在项目规划阶段,质量保证经理建议实施三重测试环境以确保产品质量.项目经理确定这项建议将会增加成本,而且开发和认证环境将足以保证质量.项目经理应使用什么来影响质量保证经理? A.质量成本(COQ) ...