Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用套接字接收消息时,使用conn:AttributeError:_退出_Python 2.7_Sockets - Fatal编程技术网

Python 2.7 使用套接字接收消息时,使用conn:AttributeError:_退出

Python 2.7 使用套接字接收消息时,使用conn:AttributeError:_退出,python-2.7,sockets,Python 2.7,Sockets,我有一个用python编写的脚本,需要通过套接字与另一个用java编写的脚本通信,python脚本只接收消息,我正在使用一个名为mininet的库来完成我的工作,显然它不能在python3上运行,所以我需要使用python2。我目前使用python2.7.15+ 我在堆栈上搜索了一下,在我的上下文中没有发现这个问题,很明显with语句没有实现上下文管理器,出于某种原因,我需要在套接字功能上使用它(我对python非常不熟悉,所以如果这种情况很容易用基本的python知识解释的话,请原谅我) 这个

我有一个用python编写的脚本,需要通过套接字与另一个用java编写的脚本通信,python脚本只接收消息,我正在使用一个名为mininet的库来完成我的工作,显然它不能在python3上运行,所以我需要使用python2。我目前使用python2.7.15+

我在堆栈上搜索了一下,在我的上下文中没有发现这个问题,很明显with语句没有实现上下文管理器,出于某种原因,我需要在套接字功能上使用它(我对python非常不熟悉,所以如果这种情况很容易用基本的python知识解释的话,请原谅我)

这个函数是在一个主函数上调用的,这个主函数需要等待来自java中另一个脚本的命令,在确定这七条可能消息之间的消息之后,他中断并继续代码。这里需要检查哪些消息并继续执行代码,但实际情况是:当调用函数时,代码块会一直阻塞,直到接收到连接,而当另一个脚本连接时,python脚本会抛出一个错误,指出该行有问题:

with conn:
完全错误是:

Socket created
Socket now listening
Traceback (most recent call last):
  File "script_initial.py", line 669, in <module>
    teste.run_topo()
  File "script_initial.py", line 643, in run_topo
    self.start_socket()
  File "script_initial.py", line 584, in start_socket
    with conn:
AttributeError: __exit__
已创建套接字
套接字正在侦听
回溯(最近一次呼叫最后一次):
文件“script_initial.py”,第669行,在
teste.run_topo()
文件“script_initial.py”,第643行,在run_topo中
self.start_套接字()
文件“script_initial.py”,第584行,在start_套接字中
康涅狄格州:
AttributeError:\uuu退出__

在Python 2.7中,
套接字
对象不支持上下文管理器接口。因此,不能将
with
语句与
socket
对象一起使用,必须在使用完
close
方法后显式调用它

更改:

        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            data = conn.recv(1024)
            ...
致:


使用“
”和“I have no”\uuuuu enter\uuuuuuuuuuu或“I have no\uuuuuuuuu exit\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。相反,代码必须使用更手动的方法,例如显式地
socket.close
(尽管注意GC也会自动触发关闭)。此外,
break
的位置似乎可疑。.它解决了问题,同时用户2864740的预约也是正确的
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            data = conn.recv(1024)
            ...
        conn, addr = s.accept()
        print('Connected by', addr)
        data = conn.recv(1024)
        ...
        conn.close()