欢迎访问宙启技术站
智能推送

Python中网络编程函数的应用实例

发布时间:2023-05-27 01:36:28

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网络编程函数的应用非常多,基本涵盖了网络编程的所有方面,开发人员可以根据实际应用需求,选择不同的函数来实现相应的功能。