Python高阶技巧5 -- 网络编程
1. 服务端开发
socket是一个数据的搬运工,负责不同进程之间相互的数据传输。
服务端是被动的,客户端是主动的。
import socket # 创建socket对象, 此时还未确定是服务端还是客户端 socket_server = socket.socket() # 绑定ip地址和端口 socket_server.bind(("localhost", 8888)) # 监听端口;listen方法内接收一个整数传参数,表示接受的连接数量 socket_server.listen(1) # 等待客户端连接;accept方法返回的是二元元组(连接对象,客户端地址信息) conn, address = socket_server.accept() print(f"接收到了客户端的连接,客户端的信息是{address}") # accept()方法,是阻塞的方法,等待客户端的连接,如果没有连接,就会卡在这一行不向下执行 # 完成服务端和客户端持续的交流 while True: # 接受客户端信息 data: str = conn.recv(1024).decode("utf-8") # recv接受的参数是缓冲区大小,一般给1024即可 # recv方法的返回值是一个字节数组也就是bytes对象,不是字符串,可以通过decode方法通过utf-8编码,将字节数组转换为字符串对象 print(f"客户端发送来的消息是:{data}") # 发送回复消息 # msg = input("请输入你要和客户端回复的消息:").encode("utf-8") # encode可以将字符串编码为bytes数组 msg = input("请输入你要和客户端回复的消息:") if msg == 'exit': break conn.send(msg.encode("utf-8")) # 关闭连接 conn.close() socket_server.close()
2. 客户端开发
import socket socket_client = socket.socket() socket_client.connect(("localhost", 8888)) while True: send_msg = input("请输入要发送的消息:") if send_msg == "exit": break socket_client.send(send_msg.encode("utf-8")) # 消息要编码为字节数组 recv_data = socket_client.recv(1024).decode("utf-8") print(f"服务端回复的消息为:{recv_data}") socket_client.close()