Python Socket服务端报错:'function' object has no attribute 'send'
Python TCP服务端运行AttributeError: 'function' object has no attribute 'send' 修复
报错现象
运行编写的TCP服务端代码后,首先输出如下异常内容:
Received Connection From <bound method socket.accept of <socket.socket fd=300, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.1.158', 444)>>
随后抛出Traceback回溯:
Traceback (most recent call last): File "c:\Users\WaffWaffles\Desktop\Server-TCP-Test\server.py", line 19, in <module> clientsocket.send(message.encode('ascii')) AttributeError: 'function' object has no attribute 'send'
错误原因
代码存在三处核心写法错误:
- 调用
accept方法时遗漏括号:serversocket.accept是对方法本身的引用,赋值后得到的是函数对象,不会执行等待连接的逻辑,因此后续调用send方法时会提示函数对象不存在该属性,打印address时也会输出方法对象的描述信息而非客户端地址。 - 未正确接收
accept()的返回值:socket.accept()方法的返回值是包含客户端套接字对象、客户端连接地址的二元元组,原代码分两次调用accept分别赋值,会触发两次连接等待,逻辑完全错误。 - 关闭连接的调用对象错误:连接处理完成后需要调用当前连接对应的
clientsocket对象的close()方法关闭连接,原代码直接调用socket.close()属于错误调用。
修复后完整代码
import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostbyname('192.168.1.158') port = 444 serversocket.bind((host, port)) serversocket.listen(3) while True: # 加括号执行accept方法,同时接收元组形式的两个返回值 clientsocket, address = serversocket.accept() print("Received Connection From %s" % str(address)) message = 'Hello! Thank you for connecting to the Server' + "\r\n" clientsocket.send(message.encode('ascii')) # 调用当前客户端连接对象的close方法关闭连接 clientsocket.close()
内容的提问来源于stack exchange,提问作者user4963654
相关产品推荐
相关产品推荐

