Socket
客户端
#
# py_client.py
# py_learn
#
# Created by Z. Steve on 2023/8/7 16:36.
#
import socket
def test_client():
# 1. 创建 socket
socket_client = socket.socket()
# 2. 连接到服务器
socket_client.connect(("localhost", 8091))
# 3. 发送消息
while True:
send_msg = input("请输入你要发送的信息:")
if send_msg == "exit":
break
socket_client.send(send_msg.encode("utf-8"))
# 接收服务器返回的消息. recv() 方法会阻塞
data = socket_client.recv(1024 * 2)
print("服务器返回消息为: ", data.decode("utf-8"))
# 5. 关闭连接
socket_client.close()
if __name__ == "__main__":
test_client()
服务端
- 一个服务端可以接收多个客户端请求
#
# py_server.py
# py_learn
#
# Created by Z. Steve on 2023/8/7 16:16.
#
# 0. 导入 socket 模块
import socket
def test_socket():
# 1. 创建 socket 对象
socket_server = socket.socket()
# 2. 绑定 IP 与 port
ip_port = ("localhost", 8091)
socket_server.bind(ip_port)
# 3. 服务端开始监听端口, 参数 5 表示接受的连接数量
socket_server.listen(5)
# 4. 接收客户端连接, 获得连接对象; 返回值是一个元组
# conn, 连接对象; addr, 客户端地址
# accept() 方法会阻塞,等待客户端连接。
conn, addr = socket_server.accept();
print(f"客户端连接成功!客户端信息: {addr}")
# 5. 接收客户端信息。通过 conn 来获取客户端信息
# recv() 返回是一个字节数组, 通过 decode("utf-8") 将字节数组解码为字符串
buf = 1024 * 2
while True:
data = conn.recv(buf).decode("utf-8")
print(f"客户端发来的信息是:{data}")
# 6. 向客户端发送信息
msg = input("请输入向客户端发送的信息:")
if msg == "exit":
break
conn.send(msg.encode("utf-8")) # 字符串在发送前再进行 encode()
# 7. 关闭连接
conn.close()
socket_server.close()
if __name__ == "__main__":
test_socket()