欢迎访问宙启技术站

使用Pythonsocketserver模块搭建UDP服务器的示例

发布时间:2023-12-26 23:26:08

使用Python的socketserver模块可以方便地搭建UDP服务器。下面是一个使用socketserver搭建UDP服务器的示例:

import socketserver

class MyUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print("{} wrote:".format(self.client_address[0]))
        print(data.decode("utf-8"))
        socket.sendto(data.upper(), self.client_address)

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()

以上代码定义了一个UDPHandler类,继承自socketserver模块中的BaseRequestHandler类。在handle方法中,我们可以处理客户端发送过来的数据。在这个示例中,我们将收到的数据转换为大写后发送回给客户端。

在代码的主程序中,我们指定了服务器的地址和端口号。然后创建了一个UDPServer对象,并传入服务器地址、端口号以及UDPHandler类。最后调用serve_forever方法监听客户端的连接。

下面是一个客户端发送数据到上述搭建的UDP服务器的示例:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 9999)

data = b'This is a test message'
sock.sendto(data, server_address)

received_data, server = sock.recvfrom(4096)
print(received_data.decode("utf-8"))

sock.close()

在这个示例代码中,我们创建了一个UDP socket,并指定了服务器的地址和端口号。然后将要发送的数据通过sendto方法发送到服务器。接收服务器返回的数据可以使用recvfrom方法,返回的数据是一个元组,其中第一个元素是接收到的数据,第二个元素是服务器的地址和端口号。

总结一下,在使用Python的socketserver模块搭建UDP服务器时,需要定义一个继承自BaseRequestHandler的类,并在其中编写处理接收到数据的逻辑。然后创建一个UDPServer对象,传入服务器地址、端口号以及处理器类。最后调用serve_forever方法监听客户端的连接。客户端通过创建一个UDP socket对象,然后使用sendto方法发送数据到服务器,接收服务器返回的数据可以使用recvfrom方法。