Python中网络编程函数的应用实例
Python中的网络编程函数,提供了很多可以使用的应用实例。下面列举了几个主要的应用实例:
1. 创建TCP服务器
import socket
HOST = '127.0.0.1'
PORT = 8888
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen(1)
conn, addr = server.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
print(data.decode('utf-8'))
conn.close()
server.close()
上面的代码中,我们创建了一个TCP服务器,侦听的IP地址为127.0.0.1,端口为8888。服务器一旦启动,就会接受客户端的连接。如果一个客户端连接到了这个服务器,服务器就会发送一条欢迎消息给这个客户端。然后服务器会持续接收客户端传来的消息,并将这些消息返回给客户端。
2. 创建TCP客户端
import socket
HOST = '127.0.0.1'
PORT = 8888
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))
while True:
data = input('Enter message: ')
if not data:
break
client.sendall(data.encode('utf-8'))
rcv = client.recv(1024)
print(rcv.decode('utf-8'))
client.close()
上面的代码中,我们创建了一个TCP客户端,连接到了127.0.0.1:8888的服务器。客户端会等待用户输入消息,一旦用户发送消息,客户端就会将这个消息发送给服务器。客户端接着等待服务器返回的消息,并将返回的消息打印到控制台上。
3. 创建UDP服务器
import socket
HOST = '127.0.0.1'
PORT = 8888
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind((HOST, PORT))
while True:
data, addr = server.recvfrom(1024)
print(data.decode('utf-8'))
server.sendto(data, addr)
server.close()
上面的代码中,我们创建了一个UDP服务器,和TCP服务器不一样。UDP服务器和TCP服务器最大的不同在于它并不像TCP服务器那样需要建立连接。我们使用UDP服务器来接收客户端的消息,并将这些消息返回给客户端。UDP服务器的本质是一个无连接的服务器。
4. 创建UDP客户端
import socket
HOST = '127.0.0.1'
PORT = 8888
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
data = input('Enter message: ')
if not data:
break
client.sendto(data.encode('utf-8'), (HOST, PORT))
rcv, addr = client.recvfrom(1024)
print(rcv.decode('utf-8'))
client.close()
上面的代码中,我们创建了一个UDP客户端。和TCP客户端一样,我们需要指定要连接到的服务器的IP地址和端口。客户端还是等待用户输入消息,一旦用户输入了消息,客户端就向服务器发送这条消息,并等待服务器返回的消息。客户端和服务器之间的通讯是基于无连接的,可以发现与UDP服务器的到的代码很相似。
5. 使用socketserver框架
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
data = self.request.recv(1024).strip()
if not data:
break
self.request.sendall(data)
print(data.decode('utf-8'))
if __name__ == "__main__":
HOST, PORT = "localhost", 8888
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
上面的代码中,我们使用了Python的socketserver框架,该框架提供了一个方便的基于回调函数的API。我们创建了一个TCP服务器,并在TCP服务器中定义了一个回调函数MyTCPHandler。服务器接受客户端的连接,并调用MyTCPHandler定义的handle函数处理接受的数据。MyTCPHandler.handle函数,读取客户端发送的数据,在控制台中打印出来,同时将这些数据发送给客户端。最终,我们通过调用TCPServer.serve_forever()方法,让服务器一直运行并接收客户端的连接。
综上所述,这里只是简要介绍了Python中网络编程函数的使用实例,可以看到,Python网络编程函数的应用非常多,基本涵盖了网络编程的所有方面,开发人员可以根据实际应用需求,选择不同的函数来实现相应的功能。
