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通信实现两个主机之间的信息交互的更多相关文章

  1. 两台主机之间单向Ping不通的问题

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ...

  2. Linux两台主机之间建立信任(ssh免密码)

    背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系. 在整理之前,我先说下ssh免密码的要点 : 你想免密 ...

  3. fragment之间的信息交互——onActivityResult()不经过Activity

    1.本文讲述如何fragment与fragment之间互传信息,不用使用Activity的onActivityResult()方法 核心思想:FirstFragment获取到SecondFragmen ...

  4. 网络中两台主机的通信过程(TCP)

    两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...

  5. python实现两台不同主机之间进行通信(客户端和服务端)——Socket

    大家好,我是辰哥~ 今天教大家通过Python进行Socket网络编程 (做一个聊天程序) 可以实现在不同的主机(电脑)之间进行通话. 具体效果如何,接着往下看 可以看到客户端(上方)向服务器端(下方 ...

  6. Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号

    1.架构 C/S架构(鼻祖) C:client  客户端 S:server  服务器 早期使用的一种架构,目前的各种app使用的就是这种架构,它的表现形式就是拥有专门的app. B/S架构(隶属于C/ ...

  7. Java网络编程之TCP通信

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...

  8. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  9. Java 之 TCP 通信程序

    一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...

  10. C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)

    在程序设计中,涉及数据存储和数据交换的时候,不管是B/S还是C/S模式,都有这样一个概念:数据库服务器.这要求一台性能和配置都比较好的主机作为服务器,以满足数目众多的客户端进行频繁访问.但是对于一些数 ...

随机推荐

  1. vue2.x中关于引用图片的问题

    vue中引用图片的几种情况 错误片段一 <!-- template --> <img :src="p" alt="" width=" ...

  2. STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr

    STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr auto_ptr 是STL中的智能指针家族的成员之一, 它管理由 new expression 获得的对象, ...

  3. Backbone 网络-ResNet 论文解读

    摘要 残差网络(ResNet)的提出是为了解决深度神经网络的"退化"(优化)问题. 有论文指出,神经网络越来越深的时候,反传回来的梯度之间的相关性会越来越差,最后接近白噪声.即更深 ...

  4. CCRD_TOC_2008年第3期

    中信国健临床通讯 2008年第3期 目 录   银屑病和银屑病关节炎 1.        国际皮肤病专家呼吁重视生物制剂治疗银屑病 原文: http://pharmatimes.com/forums/ ...

  5. 【RocketMQ】Dledger日志复制源码分析

    消息存储 在 [RocketMQ]消息的存储一文中提到,Broker收到消息后会调用CommitLog的asyncPutMessage方法写入消息,在DLedger模式下使用的是DLedgerComm ...

  6. NOIP2017 - D2T3 - phalanx

    按照思维难度加大和代码难度减小的顺序,我们来看这道题的不同做法. 若你无畏,我亦无畏 - 平衡树 平衡树简直是天然用来维护这种操作的--合并两个区间,提取一个值.我们可以对每个行的前 \(m-1\) ...

  7. KingbaseES R6集群误删除备节点的集群目录恢复方式

    一.场景 一主一备环境 主节点:192.168.17.9 备节点:192.168.17.10 故障:备节点安装目录/home/kingbase/cluster备删除 二.恢复方式 1.备节点集群目录备 ...

  8. 【C++复习】运算符重载中的特殊运算符

    无法被重载 类属关系运算符 . 成员指针运算符 .* 作用域分辨符 :: 三目运算符 ?: 只能通过成员函数重载 赋值运算符= 方括号[] 圆括号() 指向结构体成员运算符->

  9. CGLB动态代理

    CGLB动态代理 一.CGLIB实现接口 public interface ProductInterface { void test(); } /** * 用来测试接口 */ private stat ...

  10. c++多线程thread用法小例子

    测试分布式存储系统时,针对并发测试,同时创建500个文件,采用这种方法. #include<iostream> #include<thread> using namespace ...