我一直在使用Django Web框架开发webapp。我很久以前就设置了一个别名,这样当我在命令提示符下键入go-d
(运行Ubuntu Linux服务器)时,它会启动命令./manage.py runserver 123.456.789.132:2222/
(这里所有的虚假信息)。这个一直工作得很好,我不知道,6个月。
今晚发生了一件奇怪的事。我正在远离Putty工作,突然间我的连接被丢弃了。我检查了服务器上的日志文件,看起来来自其他国家的人试图访问Web服务器(我也在这台服务器上运行一个活动网站)。看到访问看起来如何可疑,我决定用apache2配置文件中的deny from
行阻止它们。
在阻止他们的IP地址之后,我尝试使用相同的命令启动Django测试服务器。但是,现在我收到Error: That port is already in use.
错误。
当我执行netstat -antwup
时,它没有显示已建立或正在侦听的任何端口2222(我将其解释为端口2222 不正在使用中)。
这个新的port in use
问题是否与我网站上的外地不友好访问者有关?
任何帮助?
[编辑 - 更新:]好的,所以我尝试了一个有效的手册./manage.py runserver 123.456.789.123:2244
(使用不同的端口)。然后我回到go-d
的原始别名,它使用ORIGINAL端口(2222)并且它正在工作。我想我可以说我的问题得到了解答,但现在我很好奇发生了什么。
为什么我通常使用的端口突然被使用? Django测试服务器有时会这样做吗?
有什么想法?
谢谢!
答案 0 :(得分:4)
这也是我经常遇到的问题。 如果一个程序没有正确关闭,那么套接字仍然会在端口上监听。 例如,使用Ctrl + C查询内容时。 这种情况会停留一段时间,然后端口再次释放。 只要更改端口,应该是最适合你的方式。
有办法解决这个问题,但你需要稍微玩一下django。
我曾经读过一次关于那个的事情,如果你想我可以看看我是否能再次找到它。
在纯python中检查这个的方法是。
try:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
s.bind((HOST, PORT))
except socket.error, e:
if e....
print "address already in use"
答案 1 :(得分:0)
仅仅以完整性的名义,我也有同样的问题,这也是数据库连接的问题,所以请检查你的设置,但在这种情况下它给了我一个服务器启动后等待一段时间后出错。