python - 套接字错误。AttributeError: 'NoneType' 对象没有属性 'listen'
问题描述
我正在尝试编写一个简单的 TCP 套接字服务器。
我收到此错误:
File "patch", line 9, in __init__
self.__SocketServer__.listen(1)
AttributeError: 'NoneType' object has no attribute 'listen'
我不明白为什么。
代码:
class DataManager:
def __init__(self):
self.__port__ = 2121
self.__ip__ = "127.0.0.1"
self.__SocketServer__ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__SocketServer__ = self.__SocketServer__.bind((self.__ip__, self.__port__))
self.__SocketServer__.listen(1)
self.__log__("Waiting car connection...")
self.__CarSocket__, addr = self.__SocketServer__.accept()
self.__log__("Car socket connected")
self.__CarSocket__ = None
解决方案
socket.bind()
返回None
。不要将此分配回您的套接字属性:
self.__SocketServer__ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__SocketServer__.bind((self.__ip__, self.__port__))
self.__SocketServer__.listen(1)
附带说明:不要__doubleunderscore__
为自己的项目使用名称。Python保留此类名称供自己使用。
如果要将名称标记为实例内部,请在名称开头使用单下划线。Python 类没有隐私模型,所有属性始终可以从外部访问。
所以这就足够了:
class DataManager:
def __init__(self):
self._port = 2121
self._ip = "127.0.0.1"
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._socket.bind((self._ip, self._port))
self._socket.listen(1)
self._log("Waiting car connection...")
self._connection, addr = self._socket.accept()
self._log("Car socket connected")
self._connection = None
我为套接字和连接使用了更常用的名称,也遵循Python 样式指南。
推荐阅读
- typescript - 打字稿将所有枚举值映射为键
- excel - 使用宏打开后清除内存或文件
- dockerfile - 无法为 postfix 启动 docker 容器
- spring-webflux - 使用 RSocket 和 Project Reactor 实现 202 ACCEPTED - Retry-After 行为
- graph - 图数据结构可视化
- c# - 如何更改游戏中实例化的游戏对象的属性?
- java - 线程“主”java.lang.NoSuchMethodError 中的异常:com.google.common.collect.ImmutableList.toImmutableList()Ljava/util/stream/Collector;
- ruby-on-rails - Javascript 函数无法按预期工作
- php - 邮递员返回'????' 阿拉伯名字的输出
- angular - Angular:带有ajax调用响应建议的文本字段