我有一个简单的问题(嗯,至少我希望它很简单)。我已经下载了一个python脚本,它实际上是一个简单的Web服务器。在我输入浏览器127.0.0.1:8080后,浏览器显示一条消息,因为Web服务器知道如何处理GET请求。我有一个静态IP,但是,如果我尝试my.static.ip.address:8080它不起作用。它无法访问服务器。这是ubuntu不允许它,还是?
无论如何,这里是代码:
import time
import BaseHTTPServer
HOST_NAME = 'example.net' # !!!REMEMBER TO CHANGE THIS!!!
PORT_NUMBER = 8080 # Maybe set this to 9000.
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
def do_GET(s):
"""Respond to a GET request."""
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write("<html><head><title>Title goes here.</title></head>")
s.wfile.write("<body><p>This is a test.</p>")
# If someone went to "http://something.somewhere.net/foo/bar/",
# then s.path equals "/foo/bar/".
s.wfile.write("<p>You accessed path: %s</p>" % s.path)
s.wfile.write("</body></html>")
if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)
答案 0 :(得分:1)
您命名为HOST_NAME
的绑定界面应为“任何地址”,例如
HOST_NAME = '0.0.0.0'
答案 1 :(得分:0)
BaseHTTPServer继承自SocketServer.TCPServer。
让我们看一下它的构造函数:
class TCPServer(BaseServer):
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True):
BaseServer.__init__(self, server_address, RequestHandlerClass)
self.socket = socket.socket(self.address_family, self.socket_type)
if bind_and_activate:
try:
self.server_bind()
self.server_activate()
except:
self.server_close()
raise
好的,现在让我们来看看这个server_bind()方法:
def server_bind(self):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind(self.server_address)
self.server_address = self.socket.getsockname()
因此,您已将HTTP服务器的底层套接字绑定到端口8080上的主机“example.net”。这意味着您的服务器未绑定到IP地址my.static.ip.address。
尝试改为: HOST_NAME ='my.static.ip.address'