网络编程基础 socket编程 第二讲 TCP发送与接收数据,客户端和服务端的构建

本文介绍了TCP协议的基础知识,包括三次握手、数据传输、四次挥手和TCP特点。详细讲解了TCP与UDP的区别,以及两者在通信方式上的差异。通过实例展示了TCP客户端和服务器的构建流程,包括创建socket、链接、数据收发及关闭套接字。同时提出了TCP服务端为多个客户端服务和多次服务的练习,探讨了相关实现策略。
摘要由CSDN通过智能技术生成

第二讲 TCP发送与接收数据

一、TCP协议介绍

当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信。

这个全双工的通信将占用两个计算机之间的通信路线,直到它被一方或双方关闭为止。

1.三次握手

下图为初版,四次握手:
在这里插入图片描述

进化后成了三次握手,server应答和发送请求可以变成一条:
在这里插入图片描述

2. 数据传输

以下图为例,TCP协议是一个全双工通信,发送方和接收方建立了信息发送和接收渠道:
在这里插入图片描述
在一方发送消息后,另一方一定会回复信息,表明信息已接收,TCP协议的安全性体现在这里。

3.四次挥手

在这里插入图片描述
断开连接为何是四次而不是三次,可以查一下资料,这里有一篇详解,由于不是计算机专业所以还看不懂,关于TCP三次握手和四次挥手

4.TCP特点

  1. 面向连接
  2. 可靠传输
    • TCP采用发送应答机制
    • 超时重传
    • 错误校验
    • 流量控制和阻塞管理

二、UDP协议介绍

当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立连接。

当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

在这里插入图片描述

三、TCP与UDP之间的区别

  1. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
  3. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
  4. 每一条TCP连接只能是点到点的:UDP支持一对一,一对多和多对一和多对多的交互通信。
  5. TCP对系统资源要求较多,UDP对系统资源要求较少。

四、UDP通信

在这里插入图片描述
其顺序如下图所示:
在这里插入图片描述

五、TCP通信

在这里插入图片描述

六、TCP客户端构建流程

  1. 创建socket
  2. 链接服务器
  3. 接收/发送数据
  4. 关闭套接字

我们通过一段简短的代码来看一下。
首先将网络调试助手调成TCP server的角色:
在这里插入图片描述
然后编写代码:

import socket

def main():
    # 1.创建套接字,注意type为TCP流式套接字
    tcp_client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
    tcp_client.bind(('',8000))  # 绑定端口
    # 2.连接服务器
    tcp_client.connect(('192.168.59.1',8080))
    # 3.发送数据
    send_data = input('你想要发送的数据:')
    tcp_client.send(send_data.encode('gbk'))    # 已建立TCP连接,使用send方法即可
    # 4.接收数据,到这里会产生阻塞等待
    rec_data = tcp_client.recv(1024*3
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值