Python更新同一端口上新客户端的TCP / IP套接字

时间:2016-03-03 23:24:50

标签: python sockets tcp-ip

我正在使用充当服务器的程序,因为它接收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内核。有可能这样做吗?如果没有,为什么?如果是这样,我怎么能增加我的代码来实现这个目标呢?

1 个答案:

答案 0 :(得分:0)

我看到的问题是缺少s.close()。当您关闭或退出程序以使实际套接字描述符空闲时,您需要正确关闭连接。你在打电话吗?