网络协议 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)

# 用accept等待客户端连接( 在客户端连接之前处于堵塞状态, 一直到客户端连接才会解堵塞 )
# 同时返回一个新的套接字专为客户端服务, 以及客户端的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 解堵塞的两种方式

1、收到客户端发送的数据, 会自动解堵塞

2、客户端关闭了套接字

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值