#Python 的 TCP 编程

传输控制协议(Transmission Control Protocol) 是一种 面向连接、可靠传输 的网络通信协议,是现代互联网最核心的协议之一。

#客户端程序

TCP 客户端程序通常只需要连接到服务器然后收发数据即可。下面是一个示例,它向 tcpbin.com4242 端口发送 hello\n,对方会原样返回。

1import socket
2
3# 创建 TCP socket
4sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5
6# 建立链接
7sock.connect(('tcpbin.com', 4242))
8
9# 发送数据
10sock.send('hello\n'.encode())
11
12# 接收数据
13data = sock.recv(1024)
14print('收到:', data.decode())
15
  • AF_INET 表示使用 IPv4 地址,
  • SOCK_STREAM 表示使用 TCP
  • 地址参数是一个元组,第一个元素可以是域名、主机名或 IP 地址,第二个元素是端口

#服务器程序

TCP 服务器程序需要绑定并监听地址端口,等待客户端连接后进行收发数据。下面是一个示例,它监听本机所有 IPv4 地址的 4242 端口。 收到来自客户端的连接后,接收数据并原样返回。将上面客户端代码中的 tcpbin.com 改为 localhost 即可与此服务端通信。

1import socket
2
3# 创建 TCP socket,这个 socket 专门监听端口
4server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5
6# 绑定地址端口,0.0.0.0 表示本机的所有 IPv4 地址
7server.bind(('0.0.0.0', 4242))
8
9# 监听
10server.listen(5)
11
12# 循环接受连接
13while True:
14    sock, addr = server.accept()        # 接受连接,创建新的 socket
15    print(f'收到了来自 {addr} 的连接')
16    data = sock.recv(1024)              # 接收数据
17    sock.send(data)                     # 原样返回
18    sock.close()                        # 断开连接
19
  • listen 的参数表示连接队列的大小,即在 accept 接受连接之前,最多缓存的连接个数。

Python 的 TCP 编程》 是转载文章,点击查看原文