python网络编程—TCP协议(二)

本文详细介绍了TCP协议的工作原理,包括客户端与服务器的交互、服务器的绑定与监听、accept函数的作用,以及客户端和服务端套接字的关闭对通信的影响。通过一个具体的服务器端示例,展示了如何使用Python实现TCP服务器,包括创建socket、绑定端口、监听连接、接收与发送数据以及关闭套接字的过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述


一、TCP协议的原理图

在这里插入图片描述
每个客户端与服务端通讯是互不干扰的

二、注意点

1、tcp服务器─般情况下都需要绑定,否则客户端找不到这个服务器
2、tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip、port等信息就好
3、tcp服务器中通过listen可以将socket创建出来的主动套接字变为被动的,这是做tcp服务器时必须要做的
4、当一个tcp客户端连接服务器时,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
5、listen后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的
6、关闭]listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。
7、关闭accept返回的套接字意味着这个客户端已经服务完毕
8、当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线

对第8点进行解释:
服务器端

from socket import *

# todo 1、创建server-socket      TCP协议
server_socket = socket(AF_INET, SOCK_STREAM)

# todo 2、创建目标服务器,绑定一个IP和端口  服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址
host_port = ('', 8088)
server_socket.bind(host_port)

# todo  3、监听服务器的socket,listen让socket处于被动。这时就可以接收客户端的连接请求了
server_socket.listen(5)  # 一般为5,表示客户端线程挂起的个数

# todo 4、等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址
new_socket, client_addr = server_socket.accept()  # todo 新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据

# todo 5、服务器接收客户端发送过来的数据,recv一般用于TCP协议的接收数据,recvfrom用于UDP
data = new_socket.recv(1024)  # data是字节数据

print('服务器接收的数据是:', data.decode('utf-8'))

# todo 6、服务器端发送数据给客户端,在TCP中发送数据用send,UDP用sendto
new_socket.send('THANK you'.encode('utf-8'))

# 关闭套接字
new_socket.close()  # todo  new_socket关闭意味着当前客户端的服务已经完成
server_socket.close()  # todo  server_socket关闭意味着整个服务器全部关闭

客户端

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值