【从零学习python 】77. TCP服务端编程及注意事项

2024-02-29 20:24:54 浏览数 (2)

TCP服务端

在程序中,如果想要完成一个TCP服务器的功能,需要按照以下流程进行操作:

  1. 创建套接字socket
  2. 绑定(IP和端口)
  3. 监听使套接字变为可被动连接
  4. 等待客户端的连接请求accept
  5. 接收/发送数据
  6. 关闭套接字

示例代码:

代码语言:javascript复制
from socket import *

# 创建socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)

# 本地信息
address = ('', 7788)

# 绑定
tcp_server_socket.bind(address)

# 使用socket创建的套接字默认是主动的,使用listen将其变为被动的,这样就可以接收其他客户端的连接了
tcp_server_socket.listen(128)

# 如果有新的客户端来连接服务器,则产生一个新的套接字专门为这个客户端服务
# client_socket用来为这个客户端提供服务,而tcp_server_socket则可以继续等待其他新客户端的连接
client_socket, client_addr = tcp_server_socket.accept()

# 接收对方发送过来的数据
recv_data = client_socket.recv(1024)  # 接收1024个字节
print('接收到的数据为:', recv_data.decode('gbk'))

# 发送一些数据到客户端
client_socket.send("thank you !".encode('gbk'))

# 关闭为这个客户端服务的套接字,只要关闭了,就不能再为这个客户端服务
# 如果还需要服务,只能重新连接
client_socket.close()

TCP注意事项

  • TCP服务器一般需要进行绑定,否则客户端无法找到该服务器。
  • TCP客户端一般不需要绑定,因为它是主动连接服务器的,只要确定了服务器的IP和端口等信息即可,而本地客户端可以随机选择。
  • TCP服务器通过listen可以将socket创建出来的主动套接字变为被动套接字,这是编写TCP服务器时必须的操作。
  • 当客户端需要连接服务器时,需要使用connect进行连接。与UDP不同,TCP必须先建立连接才能通信。
  • 当一个TCP客户端连接到服务器时,服务器端会创建一个新的套接字,用于标识该客户端,并为该客户端提供服务。
  • listen之后的套接字是被动套接字,用于接受新客户端的连接请求,而accept返回的新套接字则用于标识这个新客户端。
  • 关闭listen之后的套接字意味着被动套接字关闭了,此时新的客户端将无法连接到服务器,但之前已经连接成功的客户端依然可以正常通信。
  • 关闭accept返回的套接字意味着该客户端已经完成服务。
  • 当客户端的套接字调用close后,服务器端的recv方法将解阻塞,并返回长度为0的数据,因此服务器可以通过返回的数据长度来区分客户端是否已经下线。

0 人点赞