我正在使用充当服务器的程序,因为它接收TCP / IP连接而不是建立连接。程序启动后,我可以在程序中打开TCP / IP端口并使用以下命令连接到它:
import socket
s = socket.create_connection(("localhost",20100))
s.send("PAUSE\30")
s.recv(1024)
这会暂停我的程序。我可以继续以这种方式发送命令。但是,如果我关闭程序,重新打开程序,重新打开程序中的端口,然后尝试相同的命令,我收到:
s.send("PAUSE\30")
s.recv(1024)
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-7-40f527ce990f> in <module>()
1 s.send("PAUSE\30")
----> 2 s.recv(1024)[1:-1]
error: [Errno 10053] An established connection was aborted by the software in your host machine
如果我打开一个新端口,比如说20101,在程序中尝试再次连接它,我会收到:
s = socket.create_connection(("localhost",20101))
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-8-857374ef86d3> in <module>()
----> 1 s = socket.create_connection(("localhost",20101))
C:\Program Files\Enthought\Canopy\App\appdata\canopy-1.5.5.3123.win-x86_64\lib\socket.pyc in create_connection(address, timeout, source_address)
569
570 if err is not None:
--> 571 raise err
572 else:
573 raise error("getaddrinfo returns an empty list")
error: [Errno 10061] No connection could be made because the target machine actively refused it
如果我重新启动程序,重新打开端口并重新启动Python内核,我只能成功重新连接。
我想在程序关闭并重新打开后仍然与程序进行通信,而无需重新启动我的Python内核。有可能这样做吗?如果没有,为什么?如果是这样,我怎么能增加我的代码来实现这个目标呢?
答案 0 :(得分:0)
我看到的问题是缺少s.close()。当您关闭或退出程序以使实际套接字描述符空闲时,您需要正确关闭连接。你在打电话吗?