Python 网络协议 TCP 详解

网络tcp协议的概述

  • TCP协议, 传输控制协议(全称:Transmission Control Protocol)是一种面向连接的, 可靠的, 基于字节流的传输层通信协议, TCP通信需要经过创建连接, 数据传送, 终止连接 三个步骤, 类似于生活中的打电话场景, 需要建立连接, 确认发送结果, 安全传输.
  • TCP 严格区分客户端服务端, 服务端一般都需要绑定端口, 否则客户端找不到服务器, 客户端一般不绑定端口, 如果客户端绑定端口会出现端口冲突导致无法多开的问题

 

TCP 相比 UDP 有哪些优势?

  • 面向连接( 确认有创建三方交握, 连接已创建才做传输 ) , 有序数据传输, 重发丢失数据包, 舍弃重复数据包, 差错的数据传输, 阻塞和流量控制

 

网络 TCP 通信实现步骤

  • TCP 客户端:
    • # 创建套接字
    • tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    • # 连接服务器
    • tcp_client_socket.connect(('server_ip', server_port))
    • # 向服务器发送数据
    • tcp_client_socket.send('数据'.encode('utf-8'))
    • # 接收服务器回传的数据
    • recv_data = tcp_client_socket.recv(1024)
    • # 关闭套接字
    • tcp_client_socket.close()
  • TCP 服务端:
    • # 创建套接字
    • tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    • # 绑定端口信息
    • tcp_server_socket.bind(("", 8080))
    • # 把监听器主动改为被动
    • tcp_server_socket.listen(128)
    • # 等待客户端连接( 在客户端连接之前处于堵塞状态, 一直到客户端连接才会解堵塞 )
    • # 同时返回一个新的套接字专为客户端服务, 以及客户端的ip , port
    • client_socket, client_addr = tcp_server_socket.accept()
    • # 等待客户端发送数据
    • recv_data = client_socket.recv(1024).decode('utf-8')
    • # 可 向客户端回传数据
    • client_socket.send("收到".encode('utf-8'))
    • # 关闭该客户端的套接字
    • client_socket.close()
    • # 关闭服务器套接字
    • tcp_server_socket.close()

 

listen(128) 数值代表的含义

  • 监听变主动变被动, 128 指定最多允许多少个客户端连接到服务器, 他的值至少为1, 收到连接请求后, 这些请求需要排队, 如果队列满, 就拒绝请求, 请注意: 最大限制是取决于操作系统, Ubuntu上默认是128

 

TCP 服务器 recv 解堵塞的两种方式

  • 收到客户端发送的数据, 会自动解堵塞
  • 客户端关闭了套接字

Re: 可以通过判断收到数据的长度来判断客户端是否下线, 长度为0代表已下线

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值