【发布时间】:2015-07-25 14:10:05
【问题描述】:
我正在尝试编写一个程序,该程序可以使用一些用户给定的参数来更改网页的内容。经过几次尝试和一些谷歌搜索,我设法得到了一些结果(我将网络服务器放在一个线程中以便继续主程序中的其他任务)。它似乎在 Windows 中运行得相当流畅,但我总是得到一个
socket.error: [Errno 98] 地址已在使用中
当我从我的 linux 机器上尝试时(整个过程最后必须在 raspian 上运行)。
我读到了 here 的内容,它解释了 SO_REUSEADDR 套接字选项(我认为它与此有关)在不同的操作系统之间具有不同的行为(如果我没有误解,它在 Windows 上“工作”,这要归功于一个错误) ,但我找不到解决方案让它在 Linux 上以这种方式工作,因为默认情况下此选项已设置为 True。
这是生成错误的代码的简化摘要:
import web
probe = raw_input("1st content: ")
web.web(probe)
probe = raw_input("2nd content: ")
web.web(probe)
raw_input()
使用此模块 (web.py)
# -*- coding: utf8 -*-
def web(text):
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
import threading
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(bytes(text.encode('utf-8')))
self.wfile.close()
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
allow_reuse_address = True
server = ThreadedHTTPServer(('', 8080), Handler)
print 'Now serving, use <Ctrl+C> to break'
thread = threading.Thread(target = server.serve_forever)
thread.daemon = True
thread.start()
是否有真正的解决方案来消除此错误?或者有没有更好的方法来管理处理程序以实现我的目标?
编辑:输入“第二个内容”后发生错误。第一个实例运行完美,所以我可以确定套接字没有被其他任何东西使用。
谢谢大家!
【问题讨论】:
标签: python basehttpserver basehttprequesthandler