我是socket编程的新手,遇到了一个令人费解的问题:
我有一个Windows程序,我无法改变(专有软件)但尝试使用tcp套接字连接到特定的IP和端口.
在我的linux盒子里,我写了一个小的python脚本来为win prog服务套接字.这工作正常,直到我杀死我在Linux上的编程.初始服务器套接字未按指定关闭,我无法重新启动程序,直到套接字被垃圾回收.
如果我尝试使用linux套接字(在单独的python脚本中),我没有问题.
这是一个最小的代码示例:
import socket
server = socket.socket()
server.bind(('192.168.0.111', 50001))
server.listen(1)
conn, addr = server.accept()
print 'Connection established'
running = True
while running:
try:
data = conn.recv(4096)
except KeyboardInterrupt:
conn.close()
running = False
else:
if data:
print data
else:
conn.close()
running = False
server.close()
Run Code Online (Sandbox Code Playgroud)
如果我用Ctrl-C杀了它,它会正常退出.但是在重新启动脚本时,我得到一个socket.error,说明该地址已被使用.大约一分钟后,程序再次运行.
我也尝试在关闭之前关闭(aka conn.shutdown(2)和server.shutdown ...),但这没有任何效果.
是否有更好的"正确"方法来关闭Windows套接字?我是否会错过一些关于套接字的基本信息?
谢谢!
编辑:我想我刚才看到了答案: 在python 2.6中关闭套接字的正确方法是什么?
虽然我使用的是python 2.5,但它仍然有效.