Socket 使用 IP 地址 + 端口 + 协议的三元组唯一标识一个通信链路。服务器端的一个通信链路可以对应于多个客户端,比如一个 Web 服务器的 80 端口可以同时服务于大量的客户端。
import socket
import datetime
HOST = '0.0.0.0'
PORT = 8000
# AF_INET 说明使用 IPv4 地址,SOCK_STREAM 指明 TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定 IP 与 端口
s.bind((HOST, PORT))
# 监听
s.listen(1)
while True:
# 接收 TCP 连接,并返回新的 Socket 对象
conn, addr = s.accept()
# 输出客户端的 IP 地址
print("客户端 IP 地址:", str(addr))
dt = datetime.datetime.now()
message = "当前时间" + str(dt)
# 向客户端发送当前时间
conn.send(message)
print("发送", message)
# 关闭连接
conn.close()
通过 socket()、bind()、listen() 的一系列调用实现了对指定端口的监听,通过 accept() 接收客户端的连接,当有客户端连接成功后将当前系统时间发送给客户端,并马上关闭连接。代码主体处于 while 循环中,所以程序将不断监听并一直运行。
import socket
HOST = "127.0.0.1"
PORT = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
print("连接端口和地址", HOST, PORT)
# 接收数据,本次接收数据的最大长度为1024
data = s.recv(1024)
print("接收服务端返回的数据", data)
# 关闭连接
s.close
客户端通过 connect() 调用、连接服务器,连接成功后接收从服务器发来的数据,然后关闭连接、退出程序。