我有一个套接字服务器程序:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:sele
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
当我在终端上运行它时
出现错误:
sele-MacBook-Pro:test01 ldl $ ./tests02-server.py
追溯(最近一次通话):
中的文件“ ./tests02-server.py”,第11行 使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)为s:
AttributeError:退出
为什么会出现此错误?
答案 0 :(得分:1)
您可能已经知道了这一点,但是如果以以下方式从终端运行脚本,则不会收到错误:〜$ python3 echo-server.py
答案 1 :(得分:0)
您不能将socket.socket(socket.AF_INET, socket.SOCK_STREAM)
与with
一起使用。为了使with
语句可以清理正在使用的资源,该资源的对象必须具有__exit__
方法。 socket.socket(socket.AF_INET, socket.SOCK_STREAM)
返回的内容显然没有__exit__
可以调用的with
方法,因此出现此错误。
每个@jasonharper,如果您使用的是Python3,这听起来似乎可行。也许您是从某个地方复制了Python3代码,但正在运行Python 2.7?