南阳网站推广外包,网络营销的主要手段和策略,郑州网站建设seo优化,浙江省建设培训中心网站首页概述 在上一节#xff0c;我们介绍了如何在Python中使用Json#xff0c;包括#xff1a;Json序列化、Json反序列化、读Json文件、写Json文件、将类对象转换为Json、将Json转换为类对象等内容。在这一节#xff0c;我们将介绍如何在Python中使用网络。Python网络编程覆盖的范…概述 在上一节我们介绍了如何在Python中使用Json包括Json序列化、Json反序列化、读Json文件、写Json文件、将类对象转换为Json、将Json转换为类对象等内容。在这一节我们将介绍如何在Python中使用网络。Python网络编程覆盖的范围非常广包括套接字编程、socketserver、HTTP和Web开发、异步编程和asyncio等。在本专栏中我们将只介绍比较基础的套接字编程和socketserver。 套接字编程 套接字是用于在计算机之间进行通信的基本接口。Python的socket库提供了一个用于创建和管理套接字的接口你可以使用这个库来创建客户端和服务器应用程序。socket库提供了许多用于网络编程的函数以下是一些常用的函数列表。 函数 含义 socket() 创建一个新的套接字对象。 bind() 将套接字绑定到指定的地址IP地址和端口号。 listen() 开始在套接字上监听传入的TCP连接。 accept() 接受来自客户端的TCP连接并返回客户端套接字和地址。 connect() 连接到指定的TCP服务器和端口。 send() 发送TCP数据到连接的服务器。 recv() 从连接的服务器接收TCP数据。 sendall() 发送所有TCP数据到连接的服务器。 recvfrom() 从连接的服务器接收UDP数据并返回数据和发送者的地址。 sendto() 向连接的服务器发送UDP数据并指定数据和接收者的地址。 getsockname() 返回套接字自身的地址返回值通常是元组(ip, port)。 getpeername() 返回连接的对端地址返回值通常是元组(ip, port)。 setsockopt() 设置套接字的选项。 getsockopt() 获取套接字的选项。 close() 关闭套接字连接。 select() 监视多个套接字等待它们变得可读或可写。 setblocking(flag) 如果flag为 False则将套接字设为非阻塞模式否则将套接字设为阻塞模式默认值。非阻塞模式下如果调用recv()没有发现任何数据或send()调用无法立即发送数据那么将引起socket.error异常。 接下来我们介绍几个比较重要的套接字函数。 1、创建套接字使用socket()函数创建一个套接字对象。
import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM) 在上面的示例代码中我们创建了一个TCP套接字。AF_INET参数指定了该套接字使用IPv4协议SOCK_STREAM参数指定了该套接字使用TCP协议。 2、连接服务器使用connect()函数连接到服务器。
import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address (localhost, 8000)
sock.connect(server_address) 在上面的示例代码中我们创建了一个套接字并将其连接到本地主机8000端口上的服务器。 3、发送和接收数据使用send()函数发送数据使用recv()函数接收数据。
import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address (localhost, 8000)
sock.connect(server_address)message bHello, CSDN
sock.send(message)data sock.recv(1024)
print(Received, repr(data))sock.close() 在上面的示例代码中我们创建了一个套接字并将其连接到本地主机8000端口上的服务器。然后我们发送了一个消息并等待接收响应。最后我们关闭了套接字。 下面我们给出一个简单的服务端程序和客户端程序。服务端程序的示例代码如下
# Server.py
import socket# 创建socket对象
server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP地址和端口号
server_socket.bind((localhost, 8000))# 开始监听连接
server_socket.listen()
print(Waiting connect...)# 接受客户端连接
client_socket, client_address server_socket.accept()
print(Client connect success, client_address)# 接收客户端发送的数据
data client_socket.recv(1024)
print(Recv data, data.decode())# 向客户端发送数据
client_socket.send(Hello client.encode())# 关闭连接
client_socket.close()
server_socket.close() 客户端程序的示例代码如下
# Client.py
import socket# 创建socket对象
client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((localhost, 8000))# 向服务器发送数据
client_socket.send(Hello server.encode())# 接收服务器发送的数据
data client_socket.recv(1024)
print(Recv data, data.decode())# 关闭连接
client_socket.close() socketserver socketserver模块是一个用于构建基于套接字的网络服务器的模块。这个模块提供了一些类比如SocketServer、TCPServer、UDPServer等用于处理底层的socket通信并且还提供了处理器类用于处理每个客户端的请求。 下面我们给出一个基于socketserver的服务端程序其示例代码如下
# Server2.py
import socketserverclass MyTCPHandler(socketserver.BaseRequestHandler):def handle(self):self.data self.request.recv(1024).decode()print(fRecv data from {self.client_address[0]}: {self.data})self.request.sendall(bHello client)socketserver.TCPServer.allow_reuse_address True
server socketserver.TCPServer((localhost, 8000), MyTCPHandler)
server.serve_forever() 在上面的示例代码中我们创建了一个自定义的TCP处理器类MyTCPHandler该类继承自socketserver.BaseRequestHandler。这个处理器类有一个handle()函数当有新的客户端连接时这个函数便会被调用。我们在这个函数中接收客户端发送的数据并发送一条回应。然后我们创建了一个TCP服务器对象指定了要连接的服务器地址和端口以及我们自定义的处理器类。最后调用server的serve_forever方法开始监听客户端的连接。