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模式,都有这样一个概念:数据库服务器.这要求一台性能和配置都比较好的主机作为服务器,以满足数目众多的客户端进行频繁访问.但是对于一些数 ...
随机推荐
- RabbitMQ 延迟消息实战
RabbitMQ 延迟消息实战 现实生活中有一些场景需要延迟或在特定时间发送消息,例如智能热水器需要 30 分钟后打开,未支付的订单或发送短信.电子邮件和推送通知下午 2:00 开始的促销活动. Ra ...
- flask服务器 + 协程 + 爬虫 + ui自动化
公司有个爬取的需求,要求持续性爬取,需要永久性地挂载到目标网站上,每天爬一次里面的数据.数据有下载表格的,我通过ui自动化点击拿到数据:还有一部分数据是几乎所有的图片信息,信息量近百万,这部分用scr ...
- JZOJ 3207.Orthogonal Anagram
\(\text{Problem}\) 给出一个字符串,求经过重新排列的另一个字典序最小的字符串,满足:相同的位置上 原串与结果串的字符不同.不存在则输出空串. \(\text{Solution}\) ...
- 如何在VC++ 6.0中实现拖动指令改变执行路径?
前文提要: 在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作. 调试程序暂停时,源代码或"反汇编"窗口边距处的黄色箭头标记要运行 ...
- knock:端口敲门服务
knock:端口敲门服务 端口敲门服务,即:knockd服务.该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来"敲门",使系统开启需要访问的 ...
- 从 B 站出发,用 Chrome devTools performance 分析页面如何渲染
页面是如何渲染的?通常会得到"解析 HTML.css 合成 Render Tree,就可以渲染了"的回答.但是具体都做了些什么,却很少有人细说,我们今天就从 Chrome 的性能工 ...
- VScode本地搭建服务代码如何让其他人访问?
如本地开发域名访问: http://127.0.0.1:5500/pages/information/information.html?id=2259 想让别人访问: win+R -------> ...
- PostgreSQL函数如何返回数据集
背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对象在PG里都叫函数. 函数由函数头,体和语言所组成,函数头主要是函数的定义,变量的定义等,函数体主要是函数的实现,函数的语 ...
- mysql常用命令汇总
1.查询表占用空间语句:SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Row ...
- C#辗转相除法输出最大公约数
void main() { int r, m, n, t; scanf_s("%d\n%d", &m, &n); if (m < n) { t = m; m ...