繁体   English   中英

Python套接字服务器失败

[英]Python socket server failing

我正在尝试在python 3中启动UDP服务器。

我从这个例子中复制了代码

这是我的确切代码。

import socketserver

class MyUDPHandler(socketserver.BaseRequestHandler):
    """
    This class works similar to the TCP handler class, except that
    self.request consists of a pair of data and client socket, and since
    there is no connection the client address must be given explicitly
    when sending data back via sendto().
    """

    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print("{} wrote:".format(self.client_address[0]))
        print(data)

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

我只删除了handle方法的回复并更改了端口号。

当我尝试运行它时,我得到了这个

$ sudo python3 test.py
  File "test.py", line 19, in <module>
    with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
AttributeError: __exit__

我试图在安装在Raspberry Pi 3上的Python 3.4.2中运行它,它今天早上正在运行。 我GOOGLE了AttributeError: __exit__ ,发现with内置的方法的用途,例如__exit__到正常关闭后,它已经完成运行后,它缩进的说明。

完全相同的代码在我的Windows机器上运行正常(Python 3.6.2)和用于在我的覆盆子pi上运行的代码,我整天用它做的唯一事情是安装x11vnc服务器并插入许多USB设备。 (一张采集卡和arduinos,没有来自不受信任来源的USB驱动器)。

所以我的问题是 ,什么可能导致Attribute Error: __exit__ socketserver库中的socketserver

上下文管理器已添加到3.6中的socketserverhttpssocketserver ,带有commit

低于3.6,在3.4.2中,你必须手动调用server_close()

try:
    server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()
finally:
    server.server_close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM